py2app未包含pythonpath
我正在尝试用py2app来制作一个应用程序。我可以成功构建这个应用,但当我运行它时,控制台出现了ImportError
错误,提示说找不到模块No module named PythonApp
,而这个模块其实就是我所有源代码所在的文件夹,它的位置在我的PYTHONPATH
里。
为了避免命名空间的问题,我一直在用from PythonApp import file
来导入本地文件,而不是简单地用import file
。
我尝试用这个命令来构建应用:python setup.py py2app --use-pythonpath
,但似乎没有什么效果。
- 我是不是应该把所有的导入语句改成
import file
呢? - 我该怎么让py2app识别我的
PYTHONPATH
呢?
1 个回答
1
如果我理解你的问题没错,你的布局是这样的:
PythonApp/
__init__.py
file.py
foo.py
你想通过 from PythonApp import file
从 foo.py
中导入模块 file
。如果这就是你想设置 PYTHONPATH
的唯一原因,其实有个更简单的办法:使用相对导入:
from . import file
你可以在 PythonApp
的一个子包中使用 from .. import file
,这样就可以避免和标准模块的名字冲突。
如果你因为其他原因需要修改导入路径,你也可以在启动脚本中设置 sys.path
变量(可能 py2app 也有一些选项可以做到这一点)。不过要记住,如果你把外部目录添加到导入路径中,分发应用程序包会变得更麻烦。
另外,ImportError
的一个更简单的解释是,py2app 没有把你的包复制到应用程序包中。确保你在 setup()
的 packages
参数中列出了所有的包。