我有一个中等大小的python命令行程序,从我的源代码运行良好,我已经创建了一个源代码分发文件并使用“python setup.py install”将其安装到虚拟环境中
由于这是一个纯Python程序,并且只要最终用户安装了Python和所需的软件包,我的想法是我可以通过PyPi为所有可用平台分发它作为源代码分发。
安装完成后,我在virtualenv site-packages目录下找到一个'appname'目录,当我编写“python'pathtovirtualenv'/ Lib / sitepackages /'myappname'
时,它也能正常运行但这是最终用户应该从命令行运行distutils-distributed程序的方式。
我提供了很多关于如何使用distutils分发程序的信息,但没有介绍最终用户在安装后如何启动它。
答案 0 :(得分:0)
由于您已经创建了setup.py
,我建议您查看entry_points
:
entry_points={
'console_scripts': [
'scriptname=yourpackage.module:function',
],
},
在这里,您有一个名为yourpackage
的包,其中包含一个名为module
的模块,您可以参考函数function
。此函数将由名为scriptname
的脚本包装,该脚本将安装在用户bin
文件夹中,该文件夹通常位于$PATH
中,因此用户只需键入scriptname
即可在他通过pip install
安装您的包裹后。
总结:用户将通过pip install yourpackage
安装软件包,最后可以通过function
拨打module
中的script name
。
以下是有关此主题的一些文档:
https://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation http://www.scotttorborg.com/python-packaging/command-line-scripts.html
答案 1 :(得分:0)
好吧,我最终想通了。
最初,我想只使用distutils,我喜欢它,当最终用户可以用最少的额外依赖项安装它。但我现在发现,在我的情况下,setuptools是更好的选择。
我的目录结构如下(Subversion):
trunk
|-- appname
| |-- __init__.py # an empty file
| |-- __main__.py # calls appname.main()
| |-- appname.py # contains a main() and imports moduleN
| |-- module1.py
| |-- module2.py
| |-- ...
|-- docs
| |-- README
| |-- LICENSE
| |-- ...
|-- setup.py
我的setyp.py
基本上是这样的:
# This setup file is to be used with setuptools source distribution
# Run "python setup sdist to deploy
from setuptools import setup, find_packages
setup( name = "appname",
...
include_package_data = True,
packages = find_packages(),
zip_safe = True,
entry_points = {
'console_scripts' : 'appname=appname.appname:main'
}
)
现在的下一步是弄清楚如何在用户计算机上安装docs目录的内容。
但是现在,我正考虑在主脚本中添加--readme,--license,--changes,--sample(等等)选项,以便在运行时显示它们。