我正在使用:
我的目录设置如下:
Project
|
+ -- DoSomething
| |
| +-- doessomething.py
|
+ -- GUIs
|
+--GUI_main.py.py文件包含以下代码:
doessomething.py
def doing():
print('Doing')GUI_main.py
from DoSomething.doessomething import *
doing()pyinstaller --onefile --noconsole GUIs/GUI_main.py
pyinstaller --onefile --noconsole -p /path/to/DoSomething/dir GUIs/GUI_main.py其中DoSomething的路径是我的计算机上的绝对路径。
工作目录作为项目directory
该程序在PyCharm中编译和运行良好,但是在用PyInstaller打包并运行它之后,我得到以下错误:
Traceback (most recent call last):
File "GUI_main.py," line 1, in <module>
ModuleNotFoundError: No module named 'DoSomething'发布于 2022-08-26 16:26:52
简单地说,您告诉PyInstaller的目录是错误的;您希望使用-p /path/to/Project。这是因为您的DoSomething文件夹位于根目录Project中。您正在告诉PyInstaller在哪里查找要导入的模块/包。
为了更多的背景..。
我自己并不使用PyCharm,但是它似乎是自动地为您处理一些事情:它将顶级Project路径添加到您的Python路径中。这意味着当您的代码试图导入模块时,Project是它查找该模块名称的位置之一。这就是您的代码在PyCharm中工作的原因。
如果您打开一个标准终端,转到Project,并运行python GUIs/GUI_main.py,您应该会发现您得到了一个ModuleNotFoundError。为了使其工作,您可以将适当的目录添加到Python路径环境变量(对于当前会话)中:
export PYTHONPATH=/path/to/Project:$PYTHONPATH这样做之后,直接运行脚本就可以了。同样整洁的是PyInstaller尊重您的Python路径..。因此,您可以在不指定任何搜索文件夹的情况下运行PyInstaller,并且它将正确地找到您的其他Python文件。
Sidenote:标准做法是将Python包/模块(本质上是文件夹/文件)名称保持为小写。
发布于 2022-10-22 14:55:59
我发现我的结构不是最聪明的。我能够使用pyinstaller而不使用命令中的完整路径。将主GUI python文件保存在主项目文件夹中可以解决这个问题。就像这样
ProjectFolder
|
+ -- DoSomething
| |
| +-- __init__.py
| |
| +-- doessomething.py
|
+ -- GUIs
| |
| +--add_on_gui.py
|
+ GUI_main.py然后在项目目录中的命令行中。
pyinstaller --onefile --noconsole GUI_main.py
这对我起了作用。
https://stackoverflow.com/questions/73495388
复制相似问题