【问题标题】:packaging python application for linux为linux打包python应用程序
【发布时间】:2016-04-01 04:19:08
【问题描述】:

我使用 python 和 PyQt5 制作了一个 GUI 应用程序。我想打包这个应用程序,但似乎没有直接的方法可以做到这一点。此外,我找到的答案是打包 python 模块而不是应用程序。我已经阅读了各种文章和官方文档,但似乎仍然没有正确的答案,尽管有几种解决方法可以达到相同的效果,但我只想知道标准方法是什么。

这是我的目录结构:

Moodly/
    Moodly/
        __init__.py
        controller.py
        logic.py
        models.py
        view.py
        resoure.py
        style.py

        sounds/
             notify.wav
             message.wav

    setup.py
    MANIFEST.in
    setup.cfg
    run.py
    moodly.png
    Moodly.desktop

我要达到什么目的: 给用户一个 Moodly 的 tar 文件。用户解压,运行命令

python setup.py install 

在终端中,安装程序将所有文件放在适当的位置并创建一个 Moodly.desktop 文件,可能在 usr/local/share/applications 点击哪个用户可以运行该应用程序。

我的实现方式:

setup.py

from setuptools import setup

setup(

name="Moodly",

version="1.0",

author="Akshay Agarwal",

author_email="agarwal.akshay.akshay8@gmail.com",

packages=["Moodly"],

include_package_data=True ,

url="http://github.com/AkshayAgarwal007/Moodly",

entry_points = {
          'gui_scripts': [
              'moodly = Moodly.controller:main',
          ],
      },

# license="LICENSE.txt",

description="Student Intimation system",

# long_description=open("README.txt").read(),

# Dependent packages (distributions)
)

MANIFEST.in

include Moodly/sounds/notify.wav
include Moodly/sounds/message.wav

现在没有 setup.cfg 我运行命令:

python setup.py install

这成功地将 Moodly 安装到 /usr/lib/python-3.4/site-packages 连同声音目录。现在,当我从终端输入时(在 setup.py 的入口点中指定),我的 GUI 应用程序成功启动。

现在我只需要在 usr/local/share/applications 中创建 Moodly.desktop 和 moodly.png 的设置,我试图通过这个来实现:

setup.cfg

[install]
install_data=/usr/local/share/applications

将此添加到 setup.py

 data_files = [("Moodly", ["moodly.png","Moodly.desktop",])],

但这似乎以某种方式复制了 python-3.4/site-packages/Moodly 中的文件,而不是指定的目的地,但它曾经与 distutils

配合得很好

This guy also seems to have faced the same issue

我使用的其他一些链接:

python-packaging

starting with distutils

所以我尝试这样做的方式,其中有多少是正确的,以及执行它的标准方式是什么。我怎样才能将 Moodly.desktop 放在正确的位置,或者有什么更好的替代方法来完成整个过程。

此外,使用 Pyinstaller 是一个更好的主意。 Pyinstaller 会使用我不想要的 PyQt5、requests 和 beautifulsoup4(我使用的外部模块)打包应用程序。我想使用 setuptools 提供的 install_requires 选项,而不是让用户下载他们可能已经拥有的模块。

【问题讨论】:

    标签: python linux pyqt setuptools distutils


    【解决方案1】:

    .desktop 文件不应该使用 Distutils 安装。 Distutils 只关心安装 Python 包。

    要安装分发级打包附带的 .desktop 文件、图标和其他文件,您应该查看构建自动化系统,例如 CMake。

    此过程的第一步是让 CMake 构建 Python 项目。你应该在这里看看如何做到这一点:https://bloerg.net/2012/11/10/cmake-and-distutils.html

    除此之外,安装 .desktop 文件也很容易。假设您已经编写了一个 .desktop 文件并将其放在某个地方,那么安装它就是一件事情:

    install(PROGRAMS com.akshay.moodly.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
    

    在您的 CMakeLists.txt 文件中。

    请注意,您将 .desktop 文件安装到 ${XDG_APPS_INSTALL_DIR}(这是一个 CMake 变量),而不是像 /usr/local/share/applications 之类的硬编码路径。用户(以及几乎所有自动发行包构建器)将始终将您的包安装到临时路径,然后将文件复制到他们的包中。永远不要假设您的应用程序将存在于 /usr/bin/usr/local/bin 或其他任何地方。用户可以将东西安装到/opt/Moodly 甚至$HOME/Moodly

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 2013-07-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2012-07-13
      相关资源
      最近更新 更多