使用 pyinstaller 处理多个文件

问题描述 投票:0回答:1

我有来自 python 项目的以下文件结构:

├───gui
│       gui.py
│       gui.ui
│
├───resources
│   │   res.py
│   │   res.qrc
│   │   res_rc
│   │
│   ├───css
│   │       style.qss
│   │
│   ├───icons
│   │       test.png
│   │
│   └───settings
│           settings.ini
│
└───source
    │   main.py
    │
    ├───manager0
    │       test0.py
    │
    ├───manager1
    │       test1.py
    │
    └───manager2
            test2.py

main.py
文件夹中的
source
,包含其他依赖的
.py
文件如下:

import sys

from PyQt5.QtWidgets import *
from PyQt5 import QtCore
from PyQt5.uic import loadUi

sys.path.append('../project/resources')
from resources import project

from source.manager0.test0 import *
from source.manager1.test1 import *
from source.manager2.test2 import *
...

我想使用 pyinstaller 创建一个

.exe
文件,为此我尝试了以下命令:

C:\Users\us\proejct\source> pyinstaller --onefile main.py

或者使用以下方法添加路径:

C:\Users\us\proejct\source> pyinstaller main.py --paths ..\resources\ --paths ..\source\

在这两种情况下都会创建一个

.exe
文件。但如果启动,我会收到如下错误:

ModuleNotFoundError: No module named 'resources'
ModuleNotFoundError: No module named 'source'
python pyinstaller
1个回答
0
投票

相对于

main.py
,文件夹
../project
不存在,所以
sys.path.append('../project/resources')
行没有用。
resources
文件夹位于路径
../resources
处,因此为了能够从中导入,您应该编写

sys.path.append('..')

manager0,1,2
文件夹与
main.py
位于同一文件夹中,因此您可以写入

from manager0.test0 import *
from manager1.test1 import *
from manager2.test2 import *

我还注意到

project
文件夹中没有
resources
文件夹,是不是拼写错误?所以,
from resources import project
总是会失败。如果要导入
resources/res.py
,可以写

from resources import res

请注意,此导入必须在

sys.path.append
调用之后进行。

完成这些更改后,您可以使用以下命令编译

main.py

pyinstaller --onefile main.py --paths ..
© www.soinside.com 2019 - 2024. All rights reserved.