gpt4 book ai didi

python - 如何在不使用子进程的情况下从 python 自动化脚本中运行 python 'sdist' 命令?

转载 作者:行者123 更新时间:2023-12-03 14:30:52 24 4
gpt4 key购买 nike

我正在编写一个脚本来自动打包“自制”python 模块并将其分发到远程机器上。

我正在使用 Pip 并创建了一个 setup.py 文件,但是我必须调用子进程模块来调用“python setup.py sdist”命令。

我已经查看了 distutils.core 中的“run_setup”方法,但我试图避免一起使用子进程模块。 (如果我已经在 python 中,我认为打开 shell 来运行 python 命令是没有意义的......)

有没有办法将 distutils 模块导入我的脚本并将设置信息直接传递给它的方法之一并完全避免使用 shell 命令?或任何其他可能对我有帮助的建议

谢谢

最佳答案

只是为了完整起见,我想回答这个问题,因为我遇到它试图自己找出如何做到这一 pip 。就我而言,我想确保使用相同的 python 版本来执行命令,这就是为什么使用 subprocess 不是一个好的选择。 (编辑:正如评论中指出的那样,我可以将 sys.executable 与子进程一起使用,尽管程序执行在 IMO 中仍然是一种更简洁的方法——而且显然非常简单。)

(使用 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

无论如何,希望这会帮助某人朝着正确的方向发展。毕竟,想要以编程方式执行打包操作有很多正当理由。

关于python - 如何在不使用子进程的情况下从 python 自动化脚本中运行 python 'sdist' 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com