我正在使用:
- PyInstaller 5.3安装程序
- Python 3.9语言
- Windows 11操作系统
我有我的目录设置如下:
Project
|
+ -- DoSomething
| |
| +-- doessomething.py
|
+ -- GUIs
|
+--GUI_main.py
.py文件包含以下代码:
doessomething.py
def doing():
print('Doing')
图形用户界面_main.py
from DoSomething.doessomething import *
doing()
1.我已经尝试了以下命令
pyinstaller --onefile --noconsole GUIs/GUI_main.py
pyinstaller --onefile --noconsole -p /path/to/DoSomething/dir GUIs/GUI_main.py
其中DoSomething的路径是我的计算机上的绝对路径。
1.将工作目录作为项目目录
1.作为GUI目录的工作目录
该程序在PyCharm中编译和运行良好,但在用PyInstaller打包并运行后,我得到以下错误:
Traceback (most recent call last):
File "GUI_main.py," line 1, in <module>
ModuleNotFoundError: No module named 'DoSomething'
2条答案
按热度按时间tktrz96b1#
简单的回答是,您告诉PyInstaller的目录是错误的;你想用
-p /path/to/Project
来代替。这是因为你的DoSomething
文件夹在Project
根目录 * 里面 *。你告诉PyInstaller * 在哪里寻找 * 你试图导入的模块/包。更多背景信息...
我自己不使用PyCharm,但它似乎在自动为您处理一些事情:这意味着当你的代码试图导入一个模块时,
Project
是它查找该模块名称的地方之一,这就是你的代码在PyCharm中按原样工作的原因。如果你打开一个标准终端,进入
Project
,然后运行python GUIs/GUI_main.py
,你 * 应该 * 发现你得到了一个ModuleNotFoundError
。为了使它工作,你可以添加适当的目录到Python Path环境变量(对于当前会话):这样做之后,直接运行脚本应该就可以了。另外一个很好的地方是,PyInstaller尊重你的Python路径......所以你可以运行PyInstaller,而不需要指定任何搜索文件夹,它会正确地找到你的另一个Python文件。
旁注:标准的做法是保持Python包/模块(实质上是文件夹/文件)名称全部小写。
exdqitrt2#
我发现我的结构不是最聪明的。我可以使用pyinstaller而不用在命令中使用完整的路径。将主GUI python文件保存在主项目文件夹中可以解决这个问题。类似于以下内容
然后在命令行的项目目录中
pyinstaller --onefile --noconsole GUI_main.py
这对我很管用。