debianzing一个python程序来获得.deb

Icy*_*ame 22 python apt linux-mint

目标

创建可安装.deb文件(或包).点击后将在Linux机器上安装软件,并在GNOME面板上放置一个图标.从那里启动这个应用程序.

我所提到的

我提到了两个debianizing指南.

指南1

指南2

第一个有一个无法理解的视频,部分是因为它的重点,部分是因为它已经过时了.(它于2007年上传)

第二个是完全文本.我到第4步,构建包.但是当我这样做时,我得到的输出与指南中给出的输出不匹配.

我需要什么

我有一个简单的python程序.它需要你的年龄,然后如果年龄低于,等于或超过18岁打印出来.这个程序只有一个文件而没有其他依赖项.我想把它变成一个.deb.

眼镜

-Python 2.7

-Linux Mint

编辑

我按照您的指示遵循了确切的目录结构.他们更换了所有myscriptcowsandbulls.构建完成后我得到了debian.当我安装它然后cowsandbulls从终端运行命令时,我收到以下错误:

Traceback (most recent call last):
  File "/usr/bin/cowsandbulls", line 9, in <module>
    load_entry_point('cowsandbulls==1.0', 'gui_scripts', 'cowsandbulls')()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 337, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2311, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2017, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named cowsandbulls
Run Code Online (Sandbox Code Playgroud)

Cha*_*tha 25

我刚刚测试了stdeb(参见https://pypi.python.org/pypi/stdeb)一个Python包,用于将任何其他Python包转换为Debian包.

首先我安装了stdeb:

apt-get install python-stdeb
Run Code Online (Sandbox Code Playgroud)

然后我用一个简单的脚本调用myscript.py了以下内容:

def main():
    print "Hello world, says myscript!"
    # wait for input from the user
    raw_input()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

重要的是,您的目录结构应该是:

somewhere/myscript/
    setup.py
    myscript/
        __init__.py
        myscript.py
Run Code Online (Sandbox Code Playgroud)

在setup.py文件中,您执行以下操作:

import os
from setuptools import setup
from nvpy import nvpy

setup(
    name = "myscript",
    version = "1.0",
    author = "Charl P. Botha",
    author_email = "cpbotha@vxlabs.com",
    description = "Demo of packaging a Python script as DEB",
    license = "BSD",
    url = "https://github.com/cpbotha/nvpy",
    packages=['myscript'],
    entry_points = {
        'console_scripts' : ['myscript = myscript.myscript:main']
    },
    data_files = [
        ('share/applications/', ['vxlabs-myscript.desktop'])
    ],
    classifiers=[
        "License :: OSI Approved :: BSD License",
    ],
)
Run Code Online (Sandbox Code Playgroud)

console_scripts指令很重要,它将创建一个名为的可执行脚本my_script,在安装生成的DEB后,该脚本将在系统范围内可用.如果您的脚本使用类似tkinterwxpython具有图形用户界面的东西,则应使用gui_scripts而不是console_scripts.

data_files指令将安装一个合适的桌面文件/usr/share/applications,以便您也可以myscript从桌面环境开始.vxlabs-myscript.desktop看起来像这样:

[Desktop Entry]
Version=1.0
Type=Application
Name=myscript
Comment=Minimal stdeb example
# myscript should wait for user input at the end, else the terminal
# window will disappear immediately.
Exec=myscript
Icon=/usr/share/icons/gnome/48x48/apps/file-manager.png
Categories=Utility;
# desktop should run this in a terminal application
Terminal=true
StartupNotify=true
StartupWMClass=myscript
Run Code Online (Sandbox Code Playgroud)

要构建DEB,请在顶层执行以下操作myscript:

python setup.py --command-packages=stdeb.command bdist_deb
Run Code Online (Sandbox Code Playgroud)

这将在deb_dist目录中创建.deb.

在安装了我这样创建的DEB后,我可以从命令行运行myscript,我也可以从桌面环境调用它.

这是一个带有上面示例代码的github仓库:https://github.com/cpbotha/stdeb-minimal-example