dav*_*ola 24 python deployment distutils
我有一个名为"example"的库,我将其安装到我的全局site-packages目录中.但是,我希望能够安装两个版本,一个用于生产,一个用于测试(我有一个Web应用程序和其他以这种方式版本化的东西).
有没有办法指定,比如"python setup.py stage",它不仅会将不同的蛋安装到site-packages中,还会将模块从"example"重命名为"example_stage"或类似的东西?
如果distutils无法做到这一点,还有其他工具吗?
jat*_*ism 52
这可以很容易地通过继承与distutils的做distutils.core.Command setup.py内.
例如:
from distutils.core import setup, Command
import os, sys
class CleanCommand(Command):
description = "custom clean command that forcefully removes dist/build directories"
user_options = []
def initialize_options(self):
self.cwd = None
def finalize_options(self):
self.cwd = os.getcwd()
def run(self):
assert os.getcwd() == self.cwd, 'Must be in package root: %s' % self.cwd
os.system('rm -rf ./build ./dist')
Run Code Online (Sandbox Code Playgroud)
要启用该命令,必须在setup()中引用它:
setup(
# stuff omitted for conciseness.
cmdclass={
'clean': CleanCommand
}
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以通过这种方式覆盖内置命令,例如我使用'clean'执行的操作.(我不喜欢内置版本如何留下'dist'和'build'目录.)
% python setup.py --help-commands | grep clean
clean custom clean command that forcefully removes dist/build dirs.
Run Code Online (Sandbox Code Playgroud)
使用了许多约定:
使用的最佳示例是查看在PYTHON_DIR/distutils /命令中找到的默认命令之一的源代码,例如install.py或build.py.
Ale*_*lli 13
当然,您可以使用新命令扩展distutils.在distutil配置文件中,添加:
[global]
command-packages=foo.bar
Run Code Online (Sandbox Code Playgroud)
这可以在distutils.cfg在distutils包装本身,..pydistutils.cfg在你的主目录(Windows上的前导点),或setup.cfg在当前目录.
然后,在Python的site-packages目录中需要一个foo.bar包.
然后在该包中添加实现新的所需命令的类,例如stage,子类化distutils.cmd - 文档很弱,但是有很多例子,因为所有现有的distutils命令也是以这种方式构建的.