【问题标题】:Using setuptools to install files to arbitrary locations使用 setuptools 将文件安装到任意位置
【发布时间】:2014-12-23 08:30:49
【问题描述】:

有没有办法使用 setuptools 将文件安装到任意位置?我之前使用过 Data Files 和 setuptools,但它们通常安装在包目录中。我需要安装一个插件文件,该插件文件将位于另一个应用程序的安装目录中。

【问题讨论】:

    标签: python setuptools distutils


    【解决方案1】:

    似乎 setuptools 故意使安装包目录之外的文件变得困难。

    我将插件文件作为包数据包含在内,并使用 setuptools 的 Entry Points 功能来公开我想要分发的插件文件的安装/卸载功能。

    setup(
        ...
        entry_points={
            'console_scripts': [
                'mypackage_install_plugins = mypackage:install_plugins',
                'mypackage_uninstall_plugins = mypackage:uninstall_plugins',
            ],                
        }
    )
    

    我只是在安装说明中添加了一个额外的步骤,以便在安装 python 包后运行以下命令:

    $> mypackage_install_plugins
    

    【讨论】:

      【解决方案2】:

      data_files 属性将允许您指定完整路径。
      你也可以在你的 setup.py 中做一些 shutil.copy 魔法,除非不要。

      【讨论】:

      • 谢谢,这似乎适用于大多数地方;但是,它似乎不允许站点包目录中另一个包中的路径,Qt Designer 插件就是这种情况。
      【解决方案3】:

      看看这个答案:

      Execute a Python script post install using distutils / setuptools

      它显示了如何添加在安装结束时运行的任意安装脚本(python、shell 等)。无论您直接使用“setup.py install”,还是像“pip install”这样的包管理器,它都会运行。有了这个,你可以在任何你想要的地方添加任何你想要的文件。

      不幸的是,我感受到了 Brendan 的痛苦 - setuptools 本身不是一个完整的包管理器,无法处理卸载。因此,无法使用卸载挂钩来反转您在安装后脚本中所做的操作。

      【讨论】:

        猜你喜欢
        • 2012-11-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多