我使用 Pyinstaller 构建了一个供公司内部使用的 Python 应用程序。现在我想将其导出为 .deb 包供人们安装。文件树(不包括我不需要在 .deb 中包含的源文件)如下所示:
- DEBIAN/
- rules
- control
- /opt/ <-- I want my app to sit in /opt/
- dist/ <-- This is what I want to distribute essentially
- my_project <-- An executable Python app
- _internal/ <-- Shared libraries needed for Python app sit here
- shared_lib1.so
- shared_lib2.so
- .....
- resources/
- images/
- my_image.png
- info/
- info.json
- warning.txt
- configuration_files/
- configA.json
- configB.json
- logs/ <-- Logs generated by Python app
- my_project_log_20240125.log
- my_project_log_20240124.log
- ...
- /usr/
- share/
- applications/
my_project.desktop <-- Dekstop entry
.deb 文件构建和安装都很顺利,但有一个例外:我的 Python 应用程序每次安装/重新安装时至少需要 chmod 757 /opt/dist/logs 才能写入日志,否则会出现“权限被拒绝”的情况。这意味着,每次我都必须手动执行此操作。
如果我在使用 dpkg-deb 构建包之前设置 chmod 757 /opt/dist/logs ,则会收到以下错误:
dpkg-deb error: control directory has bad permissions 757 (must be >=0755 and <=0775)
这意味着,如果不将 /opt/dist/logs 设置为具有 757 权限,我就无法让安装该应用程序的任何人运行它。
我不想在用户本地写入日志,因为任何其他用户可能需要访问日志。此外,每个用户都能够运行该应用程序,这意味着每个用户都应该能够写入这些日志。我不希望我的文件分散在各处,就像在一个目录中有共享库,在不同的目录中可执行,在第三个目录中登录,否则,很难找到我需要的东西,我需要到处搜索,因为我,之后几个月后,可能会忘记,我保存资源文件的位置,并且所有内容都不在一处。我不想调整任何日志写入路径,因为它应该相对于可执行文件来完成,因为该应用程序也将为 Windows 构建,这意味着,如果我必须为 Windows 和 debian 实现多个不同的日志路径,这就是痛苦。
有人可以告诉我,我能做什么?我构建 .deb 文件的方法从根本上是错误的吗?我无法自动设置权限,即使我需要它们编写Python日志文件,并且我需要日志文件与可执行文件放在一起,因为可执行文件在与可执行文件放置的位置相同的位置搜索日志。