python - 导入 python 包,嵌套包......上升,遍历等......似乎不起作用 - 我做错了什么?
问题描述
我有一个问题。我正在将我多年来编写的各种其他语言的大量代码移植到 Python 中,并将其变成一个大包。
因为不是所有东西都适合一个包 - 我在里面嵌套包。主包是 AcecoolLib,它有init,所有的嵌套包也有它。
因为我希望能够导入 AcecoolLib - 并在其下导入所有内容,所以我的所有 init 文件都导入了各自文件夹中的所有内容,以及下面的任何包。目前我只嵌套了 1 层 - 我不确定这是否会改变。可能不是。
我尝试过绝对进口,也尝试过相对进口。我试过修改 sys.modules 和 sys.path。我尝试添加路径,但不知道在哪里可以将名称映射到路径。我最终得到了很多正确加载的包,并且在某些区域我最终遇到了 Acecool.X 不存在的错误。我修了一个,又弹出一个。
我修复的一个是 - 我想,因为我有一些名为 list / tuple / dict 的包,因为这些包被引用到数据类型,所以更改它们可能是有益的。所以我将它们放入一个名为 array 的嵌套包中,并将它们全部重命名为最后包含一个 s 。列表,元组,字典。不喜欢这个 - 但错误消失了。
我现在在我的 Steam 目录中遇到错误,但我不知道 Steam 是受保护的名称。
我现在在 Sublime Text 中使用这个包。我将在那里将它用于我正在编写的插件 - 替换我使用的当前系统,它是在另一个插件中作为 AcecoolLib 导入的单个文件 Acecool.py ......它很难看,难以维护等等......所以我搬家了一些代码放入包中。
简而言之 - 我遇到了很多问题。
这是第一次主要尝试:https ://bitbucket.org/Acecool/acecoollib/src/master/
这就是我目前所在的位置:https ://www.dropbox.com/s/xvaubq78hlhym9o/AcecoolLib.7z?dl=0
我已经尝试了很多变化......
我查看了通过嵌套包导入的其他包,但没有发现任何显示我做任何不同的东西(在我开始添加一堆废话开始寻找解决方案之前)......
必须有一些东西可以让我为每个包设置路径,然后定义它们都被添加到 AcecoolLib 命名空间中,其中嵌套命名空间......
我希望能够进入 AcecoolLib/tests/ 目录并通过直接从测试运行脚本来运行测试。我还希望能够从外部/内部来源导入,以便在需要时访问所有内容。
我还希望能够只导入嵌套包或整个包。即:导入 AcecoolLib 意味着我应该能够访问 Acecool.util.accessors - 等等......或者如果我导入 Acecool.util 那么我看不到 AcecoolLib.math - 但我可以导入它。
现在我正在测试导入所有内容,因为我当前的项目几乎使用了每一个功能,等等......我添加了一些作为测试......
我已经阅读了很多关于导入主题的内容,并且遇到了无数“这是正确的方法”“不是这个”“不,这个”等等……这些都不起作用。我遇到过一些文章说永远不要使用这种类型的导入,或者这个......等等。大多数文章都不是很有用,并且被个人意见所困扰,而不是涵盖标题的材料。或者他们涵盖了基本的 101 级变体,或者显示目录树(看起来与我的相同)并说它按原样工作......
也许这是对的——也许 Sublime Text 做了一些不同的事情——即:我确实知道这个包正在被添加到 sys.modules 中,并且所有嵌套的也是——所以我只是迷路了......
任何帮助表示赞赏。谢谢!
解决方案
推荐阅读
- dismo - rstudio 请求旧版本的 java 但 macbook 不允许安装它
- python - Django模型的message_set
- c# - 我的代码有问题还是 Visual Studio 代码损坏
- javascript - 从组件模板调用 JavaScript
- groovy - JSR223 PostProcessor 错误日志由于先前的多响应模型中的相同 json 路径
- javascript - 雪花函数可以从查询中返回结果吗?
- microsoft-teams - 尝试在 Teams 中测试应用时出现清单解析错误
- python - 如果它们都包含相同的类名,我如何只解析多个块中的第一个 HTML 块?
- reactjs - 是否有 Material-UI 组件可以像在 stackoverflow 中一样搜索/选择标签?
- c - 在 C 中将 char 转换为 char*