Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用pyinstaller打包可执行python时添加相对目录?_Python_Relative Path_Pyinstaller - Fatal编程技术网

如何在使用pyinstaller打包可执行python时添加相对目录?

如何在使用pyinstaller打包可执行python时添加相对目录?,python,relative-path,pyinstaller,Python,Relative Path,Pyinstaller,我有一个python项目,它有以下文件树: \main_dir gui.py data.py \lib \files file1.txt file2.txt ... more_dirs and files in lib. gui.py导入data.pydata.py解析file1.txt作为it构造函数的一部分。 我想在windows中作为可执行文件运行gui.py,因此使用pyinstaller

我有一个python项目,它有以下文件树:

\main_dir
    gui.py
    data.py
    \lib
        \files
            file1.txt
            file2.txt
     ... more_dirs and files in lib.
gui.py
导入
data.py
data.py
解析
file1.txt
作为it构造函数的一部分。 我想在windows中作为可执行文件运行
gui.py
,因此使用pyinstaller

data.py
使用相对路径打开
file1.txt
whlie:
file1\u dir=os.path.join(os.path.curdir,“lib”,“files”)

我运行以下命令:

pyinstaller "..fullpath..\main_dir\gui.py" -p "..fullpath..\main_dir\" --runtime-hook "..fullpath..\main_dir\lib"
pyistaller成功地打包了
data.py
,但是当运行可执行文件时,我得到以下错误:

“FileNotFoundError:系统找不到指定的路径:'。\lib\files”

我试图将钩子更改为
\main\u dir\lib\files
,但得到了相同的错误


我做错了什么?如何将相对目录和文件添加到可执行文件?

如果我理解正确,您不需要使用
--运行时钩子
它用于在主脚本启动之前运行另一个脚本,例如,如果您在命令中添加
--运行时钩子=file1.py
,则运行时的执行顺序为我的任务是:1)运行
file1.py
,2)运行主脚本(当然它们已经编译/打包到exe文件中了)

因此,在您的例子中,您可以使用
gui.py
导入
data.py
,并且
data.py
操作
lib
中的
文件。您不需要在
pyinstaller
命令中包含
lib
,只需将其与编译的exe文件放在同一文件夹中,它就会像在y中一样自动查找文件我们的
data.py
;如果您愿意,可以将它们(lib中的文件)作为
datas
包含在您的spec文件中,这样在编译时这些文件将复制到目标文件夹(exe文件所在的同一文件夹),但实际上并不需要

同时删除
-p
,因为所有脚本(
gui.py
data.py
)都在同一个文件夹中,所以无需告诉
pyinstaller
在其他位置搜索
导入