使用setuptools创建一个可执行的包分发,带有--multi-version参数?

2024-06-07 23:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个Python包创建简单的Windows可执行安装程序,它只在内部提供给我团队中的其他开发人员。我想让他们同时安装多个版本的包,并通过使用不同的命令指定要运行的包:<package>-0.1<package>-0.2,等等

看起来setuptools提供了一种相当标准的方法来安装多个版本的软件包:只需为每个版本的软件包创建一个egg,然后使用带有easy_install--multi-version选项来安装每个egg。你知道吗

但是,我不想通过命令行提供eggs并要求开发人员使用easy_install,我只想提供一些他们可以运行的自动执行安装的东西。python setup.py bdist_wininst几乎完全符合我的要求,但据我所知,没有办法创建一个使用--multi-version选项的bdist_wininst(或者做任何类似的事情)。你知道吗

有办法做到这一点吗?我意识到我可以手动编写一个可执行程序来调用easy_install --multi-version,但这似乎是一个荒谬的解决方法,我希望仅仅使用setuptools的内置功能就可以实现。你知道吗


另外,有没有一种简单的方法让安装程序为每个安装的包版本自动创建<package>-<version>.bat文件?你知道吗


Tags: install方法版本package开发人员eggversionwindows
1条回答
网友
1楼 · 发布于 2024-06-07 23:39:58

用于SCons项目的setup.py脚本使用vanilla distutils实现此特性,并且该方法也可用于setuptools。在编写本文时,setup.py的当前版本是here。诀窍是使用cmdclass参数将install_lib替换为从distutils使用的默认install_lib类继承的修改类。你知道吗

相同技巧的精简版本,使用setuptools(注意,这是通过用setuptools替换distutils的所有实例来实现的):

import setuptools.command.install_lib
_install_lib = setuptools.command.install_lib.install_lib
class install_lib(_install_lib):
    def finalize_options(self):
        _install_lib.finalize_options(self)
        self.install_dir = join(self.install_dir,'PKG_NAME-'+PKGVERSION)

相关问题 更多 >

    热门问题