如何将单个 python 文件(文件锁)集成到带有 specfile 的 pyinstaller?
Posted
技术标签:
【中文标题】如何将单个 python 文件(文件锁)集成到带有 specfile 的 pyinstaller?【英文标题】:How to integrate single python file (filelock) to pyinstaller with specfile? 【发布时间】:2021-05-06 02:17:27 【问题描述】:我有一个应用程序,我用pyinstaller
打包到 windows 包中。我想使用 filelock.py 来保护文件写入。该文件以单个 .py 文件而不是包的形式出现,显然需要一种稍微不同的方法来集成到pyinstaller
。
我在规范文件的数据列表中有这个结构:
...
datas=[...
('C:\\Users\\user\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\pymzml', '.\\pymzml'),
('C:\\Users\\user\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\filelock.py', '.\\filelock'),
...]
第一个是“普通”包的示例。第二个是文件锁不起作用的例子。
我认为问题在于 filelock 不遵循程序位于子文件夹 /filelock/filelock.py
中的标准结构,而是在使用 pip pip install filelock
时仅安装文件。
【问题讨论】:
【参考方案1】:如果您的脚本执行“import filelock”,那么 pyinstaller 将查找文件并将其包含在包中,就像它找到“import sys”和“import os”一样。您不必告诉它在哪里可以找到它。
【讨论】:
这是一个更复杂的程序。导入不在脚本中,而是在内心深处的某个地方。也会尝试将其添加到脚本中。虽然,然后 flake8 会抱怨未使用的导入。 "datas" 不是正确的答案。您需要hiddenimports
参数。您可以使用--debug-imports
标志来帮助识别这些。以上是关于如何将单个 python 文件(文件锁)集成到带有 specfile 的 pyinstaller?的主要内容,如果未能解决你的问题,请参考以下文章
将多个 csv 文件连接成具有相同标题的单个 csv - Python