pycharm 未找到模块安装程序

vbopmzt1  于 2022-11-08  发布在  PyCharm
关注(0)|答案(2)|浏览(225)

我正在使用:

  • 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'
tktrz96b

tktrz96b1#

简单的回答是,您告诉PyInstaller的目录是错误的;你想用-p /path/to/Project来代替。这是因为你的DoSomething文件夹在Project根目录 * 里面 *。你告诉PyInstaller * 在哪里寻找 * 你试图导入的模块/包。
更多背景信息...
我自己不使用PyCharm,但它似乎在自动为您处理一些事情:这意味着当你的代码试图导入一个模块时,Project是它查找该模块名称的地方之一,这就是你的代码在PyCharm中按原样工作的原因。
如果你打开一个标准终端,进入Project,然后运行python GUIs/GUI_main.py,你 * 应该 * 发现你得到了一个ModuleNotFoundError。为了使它工作,你可以添加适当的目录到Python Path环境变量(对于当前会话):

export PYTHONPATH=/path/to/Project:$PYTHONPATH

这样做之后,直接运行脚本应该就可以了。另外一个很好的地方是,PyInstaller尊重你的Python路径......所以你可以运行PyInstaller,而不需要指定任何搜索文件夹,它会正确地找到你的另一个Python文件。
旁注:标准的做法是保持Python包/模块(实质上是文件夹/文件)名称全部小写。

exdqitrt

exdqitrt2#

我发现我的结构不是最聪明的。我可以使用pyinstaller而不用在命令中使用完整的路径。将主GUI python文件保存在主项目文件夹中可以解决这个问题。类似于以下内容

ProjectFolder
|
+ -- DoSomething
|    | 
|    +-- __init__.py
|    |
|    +-- doessomething.py
|
+ -- GUIs
|    |
|    +--add_on_gui.py
|
+ GUI_main.py

然后在命令行的项目目录中
pyinstaller --onefile --noconsole GUI_main.py
这对我很管用。

相关问题