来自python源码的rpm包

时间:2017-03-13 08:13:16

标签: python package rpm packaging setup.py

我有一个python脚本MyScript.py。我使用python MyScript.py [options]运行它。但我想从中制作rpm包。所以我创建了setup.py并使用python setup.py bdist_rpm创建了rpm包。为此我改变了文件结构如下:

- MyScript
   - __init__.py
- setup.py

setup.py:

from distutils.core import setup
setup(name='MyScript',
      version='0.0.1',
      author='ABC XYZ',
      author_email='abc@xyz.com',
      packages=['MyScript']
      )

当我运行python setup.py bdist_rpm时,我会在自动创建的dist文件夹下获得2 rpm文件(noarch.rpmsrc.rpm)和1 tar.gz文件。但是当我在rpm -i文件上使用norach.rpm时,它只是说已经安装了包,但是当我尝试在bash中运行MyScript命令时我无法使用该包。我在这里做错了吗?如果是的话请指导我。我有点初学包装。

1 个答案:

答案 0 :(得分:2)

是的,你做错了什么:)

您创建了一个rpm并提供了MyScript包的事实并不意味着安装rpm会暴露一个可执行文件供您运行(即$ MyScript ...。还要使可执行文件可用,这将是与软件包交互,您需要在setup.py文件中提供entry_point

一个入口点几乎映射了一个脚本,该脚本将安装在代码中的函数路径中并运行它。

添加如下内容:

setup(name='MyScript',
      version='0.0.1',
      author='ABC XYZ',
      author_email='abc@xyz.com',
      packages=['MyScript'],
      entry_point={
          'console_scripts': [ 
              'MyScript = MyScript.__init__:FUNC_NAME'
          ]
      } 
  )

其中FUNC_NAME是要调用的MyScript模块中__init__包中的函数名称。

console_script的一般格式(供将来参考)是:

'name_of_executable = package.module:function_to_execute'

可在此处找到一个示例:https://chriswarrick.com/blog/2014/09/15/python-apps-the-right-way-entry_points-and-scripts/