【问题标题】:Use setuptools to create an executable distribution of a package with --multi-version?使用 setuptools 创建带有 --multi-version 的包的可执行分发?
【发布时间】:2014-06-16 19:37:01
【问题描述】:

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

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

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

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


顺便说一句,有没有一种简单的方法可以让安装程序为每个已安装的软件包版本自动创建<package>-<version>.bat 文件?

【问题讨论】:

  • 哇哦,风滚草徽章。我想我会在没有这个功能的情况下勉强凑合吧。

标签: python windows python-2.7 versioning software-distribution


【解决方案1】:

SCons 项目的setup.py 脚本使用香草distutils 实现此功能,该方法也可用于setuptools。在撰写本文时,setup.py 的当前版本是here。诀窍是使用cmdclass 参数将install_lib 替换为继承自distutils 使用的默认install_lib 类的修改类。

相同技巧的简化版本,使用setuptools(请注意,只需将distutils 的所有实例替换为setuptools):

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)

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2019-12-20
    • 2018-05-11
    • 1970-01-01
    • 2015-11-27
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多