【发布时间】:2018-05-23 00:39:50
【问题描述】:
我在使用最新的 python 版本(2 和 3)时遇到了一些麻烦,无法找到一个好的通用导入方式。
关于我在 PyPI 上推送的包,没关系,因为我为包创建了一个子文件夹,然后在 __init__.py 中使用 package.module 进行导入。
我会在模块文件中做同样的事情。
除此之外,我还有一些我在项目之间共享的包(存储在我的 svn 服务器上),我将它们作为 svn external 导入到项目中。
层次结构通常是这样设计的:
package:
|- __init__.py
|- module1.py
|- module2.py
|- ...
当我将其导入项目时,文件夹如下所示:
project:
|- package:
|- what's above
|- app.py
我通常将包本身作为项目开发,这意味着package 是root。
当我将它导入项目时,它们变成了包,因此不再是根目录。
当在独立包项目中使用package.module 或.module 时,这当然不起作用。
在其他项目中使用与包相同的包时,这几乎可以正常工作,但我在 Python 3.6 中遇到了一些问题,告诉我一些名称没有定义(直接从命令行启动时;但在 pycharm 下工作)。
最后但并非最不重要的一点是,当使用 py2exe 生成可执行文件(来自 Python 2.7)时,即使导入似乎没问题,我也会得到一些未定义的名称(类等)异常,因为没有引发此类异常;请注意,我可以在 library.zip 中看到相关的 .pyc 文件。
几个月前我没有遇到这些问题,python 2 和 python 3 的旧版本都没有。
我在最近几天在 StackOverflow、python 文档(2 和 3)以及通过网络进行大量搜索时打开了这个问题,但没有找到与整个问题真正相关的内容。
我的问题是,有没有人知道在 python 2 和 3 之间兼容的导入的良好做法,并且在包为 __main__ 时也可以工作?还有奖金,装上 py2exe 还可以吗?
在某些时候,我为这些导入尝试了一些 try/except ImportError 块,但它有点搞砸了并且似乎不可靠。
非常感谢您的帮助!
【问题讨论】:
标签: python-3.x python-2.7 python-import py2exe