首页 > 解决方案 > 导入 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 中,并且所有嵌套的也是——所以我只是迷路了......

任何帮助表示赞赏。谢谢!

标签: pythonimportnestedpackage

解决方案


推荐阅读