Using setuptools to install files to arbitrary locations

≡放荡痞女 提交于 2019-12-11 06:16:31

问题


Is there a way to install files to arbitrary locations with setuptools? I've used Data Files with setuptools before, but those are typically installed inside the package directory. I need to install a plugin file that will be located in the install directory of another application.


回答1:


The data_files attribute will allow you to specify full paths.
You could also do some shutil.copy magic in your setup.py, except don't.




回答2:


It seems that setuptools has purposely made it difficult to install files outside of the package directory.

I instead included the plugin files as package data and used the Entry Points feature of setuptools to expose the install/uninstall functions for the plugin files I wanted to distribute.

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

I just added an additional step to the installation instructions to run the following command after installing the python package:

$> mypackage_install_plugins



回答3:


Check out this answer:

Execute a Python script post install using distutils / setuptools

which shows how to add an arbitrary install script (python, shell, whatever) that runs at the end of the install. It'll run whther you use "setup.py install" directly, or a package manager like "pip install". With this, you can add any files you want, anywhere you want.

Unfortunately, I feel Brendan's pain - setuptools, not being a full package manager itself, does not handle the uninstall. Therefore, there's no way to have an uninstall hook to reverse what you did in the post-install script.



来源:https://stackoverflow.com/questions/26599812/using-setuptools-to-install-files-to-arbitrary-locations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!