PyInstaller 无法添加 .txt 文件

PyInstaller cannot add .txt files

我对编程(以及 Python)还很陌生,Stack Overflow question/response 系统让我解决了所有问题,直到现在。我没有找到任何 post 直接解决我当前的问题,但不得不承认我真的不知道哪里出了问题。让我解释一下。

我正在尝试使用 PyInstaller 创建 *.py 脚本的可执行文件。使用简单的 Python 脚本(使用 --onefile)执行它没有问题,但是当涉及到使用其他 *.py*.txt 文件的更复杂的程序时,它就不起作用了。我知道我需要修改规范文件并尝试了很多替代方案 - 例如添加隐藏文件。

文件如下:

以下 *.txt 个文件被 UpdatingStrategy.py 读取:

我正在使用 Python 3.5 和 Windows 10。如果您需要更多信息,请告诉我。

如何正确使用规范文件并修改它以制作UpdatingStrategy.py的可执行文件?

我已经阅读了 PyInstaller 文档,但我缺少许多关键原则,因此无法正常工作。

行后

a = Analysis( ... )

添加

a.datas += [
    ("/absolute/path/to/some.txt","txt_files/some.txt","DATA"),
    ("/absolute/path/to/some2.txt","txt_files/some2.txt","DATA"),
    ("/absolute/path/to/some3.txt","txt_files/some3.txt","DATA"),
]

然后在您的程序中使用以下命令获取.txt 文件的资源路径。

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.environ.get("_MEIPASS2",os.path.abspath("."))

    return os.path.join(base_path, relative_path)

 ...


 txt_data = open(resource_path("txt_files/some.txt")).read()

确保按照 python -m PyInstaller my_target.spec 的方式构建它...不要在编辑规范文件后直接针对您的 .py 文件调用 PyInstaller,否则它会覆盖您编辑的文件...

任何在 2021 年读到这篇文章的人...我刚刚 运行 遇到了与 Pyinstaller 类似的问题。需要将文本文件添加到我的 python 代码中:

pyinstaller --add-data "/my/path/to/mytextfile.txt:/path/mytextfile.txt" mypython.py --onedir or --onefile

无论是 onedir 还是 onefile,我的代码都没有找到文本文件。事实上它抛出了错误:

IsADirectoryError: [Errno 21] Is a directory: /path/mytextfile.txt

这对我来说没有意义,因为那是文件而不是文件夹。只有当我用 --onedir 标志检查它并遵循路径时,我才意识到 pyinstaller 不仅会创建文件夹路径,还会创建文件夹 mytextfile.txt 并将 mytextfile.txt 放在那里......所以实际上 --add-data 标志只需要一个目标文件夹而不是文件的路径。

pyinstaller --add-data "/my/path/to/mytextfile.txt:path" mypython.py

或在规范文件中,即 mypython.spec

datas=[('/my/path/to/mytextfile.txt', 'path')]

应该解决这个问题。另请注意,规范文件中的“DATA”配置已消失。