我有一个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.rpm
,src.rpm
)和1 tar.gz文件。但是当我在rpm -i
文件上使用norach.rpm
时,它只是说已经安装了包,但是当我尝试在bash中运行MyScript
命令时我无法使用该包。我在这里做错了吗?如果是的话请指导我。我有点初学包装。
答案 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/