如何运行从distutils安装的python脚本

时间:2015-01-03 09:09:52

标签: python setuptools distutils setup.py

我有一个中等大小的python命令行程序,从我的源代码运行良好,我已经创建了一个源代码分发文件并使用“python setup.py install”将其安装到虚拟环境中

由于这是一个纯Python程序,并且只要最终用户安装了Python和所需的软件包,我的想法是我可以通过PyPi为所有可用平台分发它作为源代码分发。

安装完成后,我在virtualenv site-packages目录下找到一个'appname'目录,当我编写“python'pathtovirtualenv'/ Lib / sitepackages /'myappname'

时,它也能正常运行

但这是最终用户应该从命令行运行distutils-distributed程序的方式。

我提供了很多关于如何使用distutils分发程序的信息,但没有介绍最终用户在安装后如何启动它。

2 个答案:

答案 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(等等)选项,以便在运行时显示它们。