如何将单个 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

如何将 git 子模块集成到 git 工作流

如何将 JSON 文件加载到 Redshift 表的单个列

如何将带有主题和扩展名的 ACE 编辑器存储在单个文件中?

如何正确地将资源 (*.res) 文件添加到带有组件的包中?

如何免费将带有 Kivy 的 python 文件上传到 iPhone?