如何使用setuptools在自定义目录安装?
我有一个Python包,需要安装到/usr/lib/python2.7/dist-packages
或者其他特定的目录。
每次我运行setup.py
这个脚本时,它都会输出以下内容:
root@abc44:~/som_dir/plugins/abc$python setup.py install
running install
running bdist_egg
running egg_info
writing abcNewPlugin.egg-info/PKG-INFO
writing top-level names to abcNewPlugin.egg-info/top_level.txt
writing dependency_links to abcNewPlugin.egg-info/dependency_links.txt
writing entry points to abcNewPlugin.egg-info/entry_points.txt
reading manifest file 'abcNewPlugin.egg-info/SOURCES.txt'
writing manifest file 'abcNewPlugin.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
warning: install_lib: 'build/lib.linux-x86_64-2.7' does not exist -- no Python modules to install
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/EGG-INFO
installing scripts to build/bdist.linux-x86_64/egg/EGG-INFO/scripts
running install_scripts
running build_scripts
creating build/bdist.linux-x86_64/egg/EGG-INFO/scripts
copying build/scripts-2.7/abc_plugin.py -> build/bdist.linux-x86_64/egg/EGG-INFO/scripts
changing mode of build/bdist.linux-x86_64/egg/EGG-INFO/scripts/abc_plugin.py to 775
copying abcNewPlugin.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying abcNewPlugin.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying abcNewPlugin.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying abcNewPlugin.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying abcNewPlugin.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/abcNewPlugin-0.0-py2.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing abcNewPlugin-0.0-py2.7.egg
Removing /usr/local/lib/python2.7/dist-packages/abcNewPlugin-0.0-py2.7.egg
Copying abcNewPlugin-0.0-py2.7.egg to /usr/local/lib/python2.7/dist-packages
abcNewPlugin 0.0 is already the active version in easy-install.pth
Installing abc_plugin.py script to /usr/local/bin
Installed /usr/local/lib/python2.7/dist-packages/abcNewPlugin-0.0-py2.7.egg
Processing dependencies for abcNewPlugin==0.0
Finished processing dependencies for abcNewPlugin==0.0
有没有办法在setuptools
中指定包的安装目录呢?我试过--install-dir
这个选项,但它报错了:
$sudo python setup.py install --install-dir=/usr/lib/python2.7/dist-packages
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
error: option --install-dir not recognized
我也不能使用--prefix
这个选项。
6 个回答
2
我发现键 --root
和 --prefix
是互相补充的。
python3 setup.py install --root /mydir --prefix subdir
这个命令会在 /mydir/subdir
目录下找到模块的所有文件。
3
试试使用 --prefix
这个选项,比如你可以输入 python3 setup.py install --prefix $HOME/destination
来安装。别忘了更新一下你的 PYTHONPATH
变量哦。
4
不知道为什么,--prefix
对我来说没用。我现在用的是Debian/buster系统:
% python --version
Python 3.9.2
我做了个快速检查:
% apt-get source python3-openslide
% cd openslide-python-1.1.2
% python setup.py install --prefix /tmp/foo
% find /tmp/foo
/tmp/foo
/tmp/foo/lib
/tmp/foo/lib/python3.9
/tmp/foo/lib/python3.9/site-packages
/tmp/foo/lib/python3.9/site-packages/openslide_python-1.1.2-py3.9-linux-x86_64.egg
在我的情况下,我不得不:
% python setup.py install --root /tmp/bar
% find /tmp/bar
/tmp/bar
/tmp/bar/usr
/tmp/bar/usr/local
/tmp/bar/usr/local/lib
/tmp/bar/usr/local/lib/python3.9
/tmp/bar/usr/local/lib/python3.9/dist-packages
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__init__.py
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/deepzoom.py
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/lowlevel.py
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/_version.py
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__pycache__
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__pycache__/deepzoom.cpython-39.pyc
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__pycache__/__init__.cpython-39.pyc
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__pycache__/_version.cpython-39.pyc
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/__pycache__/lowlevel.cpython-39.pyc
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide/_convert.cpython-39-x86_64-linux-gnu.so
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/PKG-INFO
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/top_level.txt
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/SOURCES.txt
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/dependency_links.txt
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/requires.txt
/tmp/bar/usr/local/lib/python3.9/dist-packages/openslide_python-1.1.2.egg-info/zip-safe
13
--install-lib
是用来设置一个模块的安装目录的。
python setup.py install --install-lib /src/lib/
18
因为 python setup.py install
这个命令其实是 easy_install
的一个快捷方式,所以你可以直接运行 easy_install
,它有一个 --install-dir
的选项:
easy_install . --install-dir /usr/lib/python2.7/dist-packages
如果你需要更多的选项,可以用 python setup.py install -h
来查看,不过这些选项的说明可能会有点难懂。