我正在编写一个脚本来自动打包“自制”python 模块并将其分发到远程计算机上。
我正在使用 Pip 并创建了一个 setup.py 文件,但随后我必须调用子进程模块来调用“python setup.py sdist”命令。
我已经查看了 distutils.core 中的“run_setup”方法,但我试图避免一起使用子进程模块。 (如果我已经在 python 中,我认为打开 shell 来运行 python 命令没有意义......)
有没有办法将 distutils 模块导入到我的脚本中并将设置信息直接传递给其方法之一并完全避免使用 shell 命令?或任何其他可能对我有帮助的建议
thanks
只是为了完整起见,我想回答这个问题,因为我遇到了这个问题,试图自己找出如何做到这一点。就我而言,我想确保samepython 版本用于执行命令,这就是为什么使用子进程不是一个好的选择。 (编辑:正如评论中指出的,我可以将 sys.executable 与子进程一起使用,尽管在我看来,编程执行仍然是一种更干净的方法——而且显然非常简单。)
(Using distutils.core.run_setup https://docs.python.org/2/distutils/apiref.html#distutils.core.run_setup不调用子进程,但在受控范围/环境中使用 exec。)
from distutils.core import run_setup
run_setup('setup.py', script_args=['sdist'])
另一种选择可能是使用 setuptools 命令,尽管我尚未对此进行探索。显然,您仍然需要弄清楚如何避免重复项目元数据。
from setuptools.dist import Distribution
from setuptools.command.sdist import sdist
dist = Distribution({'name': 'my-project', 'version': '1.0.0'}) # etc.
dist.script_name = 'setup.py'
cmd = sdist(dist)
cmd.ensure_finalized()
cmd.run() # TODO: error handling
无论如何,希望这能帮助某人朝着正确的方向前进。毕竟,有很多充分的理由希望以编程方式执行打包操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)