打包linux

时间:2015-12-26 19:27:32

标签: python linux pyqt setuptools distutils

我使用python和PyQt5创建了一个GUI应用程序。我想打包这个应用程序,但似乎并不是一个直接的方式来做到这一点。而且我找到的答案是打包python模块而不是应用程序。我已经阅读了各种文章和官方文档,但似乎仍然没有对此有正确的答案,尽管我可以通过几种解决方法实现相同的目标,我只是想知道标准方法是什么。 / p>

这是我的目录结构:

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 

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

我实现这一目标的方式:

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,请求和beautifulsoup4(我使用的外部模块)打包,这是我不想要的。我想使用setuptools提供的install_requires选项,并且没有必要让用户下载他们可能拥有的模块。

1 个答案:

答案 0 :(得分:2)

.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