首页 > 解决方案 > 如何从 Git 子模块中正确导入 PyInstaller 构建的应用程序?

问题描述

我不是 Python 打包/构建专家,但试图为我编写的应用程序生成可执行文件(针对 Windows 可执行文件)。做了一些研究,发现 PyInstaller 对我的一个小项目非常有用,因为它基本上包括一个外部“cli.py”脚本和一个“setup.py”,并在该目录上运行 pyinstall 来解决问题。

结果表明,现在我必须为更“复杂的结构化项目”做同样的事情。该项目使用 git-submodule 指向另一个 repo(Python 模块),我不应该更改该文件夹代码。结构如下:

/my_app
|__ /moduleA (git_submodule)
|    |
|    |__/subModuleA1
|    |   |__ __init__.py
|    |   |__ <bunch of py scrips>
|    | 
|    |__ __init__.py
|    |__ scriptA.py
|
|__ /my_app_module
|    |
|    |__ __init__.py
|    |__ <couple of py scripts that imports moduleA stuff and should be made an executable app>
|
|__ cli.py (call a main from my_app_module)
|__ setup.py (point to a main from my_app_module)

我的问题:不确定这里是否是 PyCharm 问题(Pycharm 从 Git 子模块导入),但是当我在 PyCharm 中将这个“my_app”文件夹作为项目打开时,它需要我更新该 git-submodule 的所有内部导入. 例如:

我只是想导入一些“moduleA”的东西在“my_app_module”中使用

问题是我必须更改另一个 repo 代码,这样 PyCharm 才不会抱怨我的导入,但我不应该更改该子模块内部代码来使用它,对吧?

不确定它是否是 PyCharm 的东西,或者我对 Python 模块/打包缺乏了解,但如果有人对如何以最佳方式组织这个项目有建议,那将会很有帮助。

提前致谢 :)

标签: pythonpycharmpyinstallergit-submodules

解决方案


在 PyCharm 中,您可以右键单击您的 moduleA 并单击"Mark Directory as" => "Source Root"

但我不确定这是否会在您创建可执行文件后起作用。这个问题有多个问题,我自己也在与这个问题作斗争。如果您在导入之前将 moduleA 添加到 /my_app_module 内的 python 路径中,也许会有所帮助:

import sys
sys.path.append("moduleA")
from subModuleA1 import abc

有关更多信息,请参阅此问题。


推荐阅读