py2app未包含pythonpath

1 投票
1 回答
917 浏览
提问于 2025-04-17 06:43

我正在尝试用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 filefoo.py 中导入模块 file。如果这就是你想设置 PYTHONPATH 的唯一原因,其实有个更简单的办法:使用相对导入

from . import file

你可以在 PythonApp 的一个子包中使用 from .. import file,这样就可以避免和标准模块的名字冲突。

如果你因为其他原因需要修改导入路径,你也可以在启动脚本中设置 sys.path 变量(可能 py2app 也有一些选项可以做到这一点)。不过要记住,如果你把外部目录添加到导入路径中,分发应用程序包会变得更麻烦。

另外,ImportError 的一个更简单的解释是,py2app 没有把你的包复制到应用程序包中。确保你在 setup()packages 参数中列出了所有的包。

撰写回答