用python包分发运行脚本的正确方法?

假设我有一个名为mypackage的python包,其中包含一系列脚本.将mypackage放在site-packages目录中后,用户可以像往常一样将mypackage中的各种Python文件称为Python的mypackage.submodule1,mypackage.submodule2.但是,其中一些脚本是从命令行调用的.例如在submodule1中,我有:

== mypackage/submodule1.py ==

if __name__ == '__main__':
  main()

def main():
  # parse command line options here, do stuff

如何正确分发/打包mypackage,以便一旦“ mypackage”进入其路径,用户就可以干净地使用这些子模块作为命令行脚本?我本以为您可以做到:

python mypackage.submodule1.py arg1 arg2 ...

但是此语法无效.换句话说,用户如何在不要求实际“ mypackage”目录位于其PYTHONPATH中的情况下,将包的子模块称为脚本而不是从Py导入它们? (只有包含“ mypackage”的*目录(例如site-packages)应位于其PYTHONPATH中.)

谢谢.

解决方法:

查看http://docs.python.org/distutils/setupscript.html#installing-scripts

通常的想法是分发setup.py文件,以便当用户运行python setup.py install时,脚本将放置在路径中.几乎所有的软件包分发方法都支持此功能.如果遵循上述文档,则用户可以在系统允许的情况下进行easy_install,pip安装等.

有关示例,请参见https://github.com/django/django/blob/master/setup.py.文件顶部有很多配置,但重要的一点是底部,您可以在其中查看

setup(
    ...
    scripts = ['django/bin/django-admin.py'],
    ...
)

这为安装django软件包的用户设置了django-admin.py命令.安装后,他们可以从命令行运行django-admin.py arg1 arg2….

上一篇:VScode支持Python


下一篇:Linux下环境变量临时和永久设置