如何为启用--target选项的pip安装指定bin目录
举个例子,如果我运行这个命令
sudo pip install gunicorn
现在会生成一个文件
/usr/local/bin/gunicorn
还有一个文件夹
/usr/local/lib/python2.7/site-packages/gunicorn
我可以在命令行中运行“gunicorn”。
但是,如果我运行这个命令
sudo pip install gunicorn --target=~/tmp_directory
会在这里生成一个文件夹
~/tmp_directory/gunicorn
不过,找不到“bin/gunicorn”,所以我无法在命令行中运行“gunicorn”。我查看了pip的文档,但没有找到针对这种情况的说明。我这样做的具体原因是想在Heroku上设置一个自定义的构建包。
4 个回答
3
关于这个问题,已经在GitHub上创建了一个讨论:https://github.com/pypa/pip/issues/3934
出现这个问题的原因是,--install-option="--install-scripts=$PWD/bin"
这个选项是必须的,但它不能和.whl
文件一起使用:
.../lib/python2.7/site-packages/pip/commands/install.py:194:
UserWarning: Disabling all use of wheels due to the use of --build-options / --global-options / --install-options.
cmdoptions.check_install_build_global(options)
4
在Python 3.9中,使用--target
这个选项时,它会自动把可执行文件安装到你指定的目标目录下的一个叫bin
的子文件夹里。
19
我刚发现其实可以告诉'pip'把脚本、数据等放在哪里。
你可以使用 --install-option
来传递选项给setuptools。所以如果你想指定脚本放在哪里,你可以这样做:
pip install gunicorn --install-option="--install-scripts=$PWD/bin" -t python_modules/
现在你在当前目录的 bin/
里有了 gunicorn
命令,而包则安装在目标目录 python_modules
中。
bin/gunicorn
4
你可以用这个命令:sudo ln -s ~/tmp_directory/gunicorn /usr/bin/gunicorn
。
如果我理解你的需求没错的话,建议你试试virtualenv,这是一个用来创建独立Python环境的工具。这样你就可以在同一台服务器上为每个项目安装不同版本的Python包。这对于Python开发非常推荐。我自己在用virtualenvwrapper,这是一个让使用起来更简单的工具。