【发布时间】:2014-12-23 08:30:49
【问题描述】:
有没有办法使用 setuptools 将文件安装到任意位置?我之前使用过 Data Files 和 setuptools,但它们通常安装在包目录中。我需要安装一个插件文件,该插件文件将位于另一个应用程序的安装目录中。
【问题讨论】:
标签: python setuptools distutils
有没有办法使用 setuptools 将文件安装到任意位置?我之前使用过 Data Files 和 setuptools,但它们通常安装在包目录中。我需要安装一个插件文件,该插件文件将位于另一个应用程序的安装目录中。
【问题讨论】:
标签: python setuptools distutils
似乎 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
【讨论】:
data_files 属性将允许您指定完整路径。
你也可以在你的 setup.py 中做一些 shutil.copy 魔法,除非不要。
【讨论】:
看看这个答案:
Execute a Python script post install using distutils / setuptools
它显示了如何添加在安装结束时运行的任意安装脚本(python、shell 等)。无论您直接使用“setup.py install”,还是像“pip install”这样的包管理器,它都会运行。有了这个,你可以在任何你想要的地方添加任何你想要的文件。
不幸的是,我感受到了 Brendan 的痛苦 - setuptools 本身不是一个完整的包管理器,无法处理卸载。因此,无法使用卸载挂钩来反转您在安装后脚本中所做的操作。
【讨论】: