我几乎已经完成了一个python包的开发,并且还使用distutils编写了一个基本的setup.py:
#!/usr/bin/env python
#@author: Prahlad Yeri
#@description: Small daemon to create a wifi hotspot on linux
#@license: MIT
import cli
#INSTALL IT
from distutils.core import setup
setup(name='hotspotd',
version='0.1',
description='Small daemon to create a wifi hotspot on linux',
license='MIT',
author='Prahlad Yeri',
author_email='prahladyeri@yahoo.com',
url='https://github.com/prahladyeri/hotspotd',
package_dir={'hotspotd': ''},
packages=['hotspotd'],
data_files=[('config',['run.dat'])],
)
#CONFIGURE IT
现在这个脚本可以完美地运行。它将所需文件安装到前缀文件夹。例如,以下命令:
sudo python setup.py install --prefix /opt
将我的整个软件包安装在:
/opt/lib/python2.7/site-packages/hotspotd
但是,我希望将主要的可执行文件hotspotd.py符号链接到/ usr / bin中的相应文件,例如:
/usr/bin/hotspotd
这样用户可以通过简单地调用hotspotd start
而不是通过python间接调用来启动我的程序。
如何通过修改setup.py来实现这一目标?如果我只是在setup()调用之后在末尾写复制代码,那么每次都会调用它。我只是希望在安装程序时完成它。
答案 0 :(得分:3)
只需使用scripts
参数,如下所示:
#!/usr/bin/env python
#@author: Prahlad Yeri
#@description: Small daemon to create a wifi hotspot on linux
#@license: MIT
import cli
#INSTALL IT
from distutils.core import setup
setup(name='hotspotd',
version='0.1',
description='Small daemon to create a wifi hotspot on linux',
license='MIT',
author='Prahlad Yeri',
author_email='prahladyeri@yahoo.com',
url='https://github.com/prahladyeri/hotspotd',
package_dir={'hotspotd': ''},
packages=['hotspotd'],
data_files=[('config',['run.dat'])],
scripts=["scriptname"], # Here the Magic Happens
)
#CONFIGURE IT
现在文件scriptname
将被复制到/usr/bin/scriptname
,shebang将被调用setup.py
脚本的python版本替换。所以明智地写下你的剧本。
答案 1 :(得分:2)
现在您应该使用console_scripts让您的脚本以/usr/bin
结尾。格式为:
from setuptools import setup
setup(
...
console_scripts=[
'hotspotd = hotspotd:my_main_func',
],
...
)
答案 2 :(得分:0)
现在可以在setuptools中指定入口点:
setup(
# other arguments here...
entry_points={
'console_scripts': [
'foo = my_package.some_module:main_func',
'bar = other_module:some_func',
],
'gui_scripts': [
'baz = my_package_gui:start_func',
]
}
)