Pyinstaller无法添加.txt文件

PL *_*tal 5 python pyinstaller python-3.x

我是编程(和Python)的新手,而StackOverflow问题/响应系统使我能够解决所有问题,直到现在。我没有找到任何直接解决我当前问题的帖子,但是不得不承认我并不真正知道出什么问题。让我解释。

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

这些是文件:

  • UpdatingStrategy.py (要在可执行文件中转换的目标文件)
  • LPRfunctions.pyUpdatingStrategy.py从该文件导入函数)

*.txt读取以下文件UpdatingStrategy.py

  • Strategy_Observ.txt
  • Strategy_Problems.txt
  • Updating_Observ1.txt
  • Updating_Observ2.txt
  • Updating_Problems.txt

我正在使用Python 3.5和Windows10。请告诉我是否需要其他信息。

有人可以告诉我如何正确使用spec文件并对其进行修改,以使之成为可执行文件UpdatingStrategy.py吗?我已经阅读了PyInstaller文档,但是我缺乏许多关键原则,因此无法正常工作。

Jor*_*ley 9

下线后

a = Analysis( ... )
Run Code Online (Sandbox Code Playgroud)

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"),
]
Run Code Online (Sandbox Code Playgroud)

然后在您的程序中使用以下命令获取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()
Run Code Online (Sandbox Code Playgroud)

请确保您的构建方式类似于python -m PyInstaller my_target.spec...在编辑规范文件后,请勿直接针对.py文件调用pyinstaller,否则它将覆盖已编辑的文件...