如何使用pip将Python包安装到不同目录?

604 投票
20 回答
1020784 浏览
提问于 2025-04-15 23:12

我知道最简单的办法是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能或不想这么做。

那么,我该如何修改这个命令

pip install package_name

pip把软件包安装到默认的site-packages以外的地方呢?

20 个回答

110

我发现,设置 PYTHONUSERBASE 这个环境变量比使用 --target--install-options 选项更有效。这是根据一个关于这个问题的 讨论 得出的结论:

PYTHONUSERBASE=/path/to/install/to pip install --user

(或者在运行命令之前,使用 export PYTHONUSERBASE=/path/to/install/to 来设置你的环境中的 PYTHONUSERBASE 目录)

这样做会使用非常有用的 --user 选项,但会告诉它在一个自定义的前缀下创建 binlibshare 和其他你期望的目录,而不是默认的 $HOME/.local

然后,你可以像对待普通安装目录一样,将这个目录添加到你的 PATHPYTHONPATH 和其他变量中。

注意,如果有任何依赖的包需要在 PYTHONUSERBASE 目录中安装更新版本,你可能还需要指定 --upgrade--ignore-installed 选项,以覆盖系统提供的版本。

完整示例

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..例如,要将最新版本的 scipynumpy 包安装到一个目录中,然后你可以像这样将其包含在你的 PYTHONPATH 中(这个例子使用的是 CentOS 6 上的 bash 和 Python 2.6):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

使用 virtualenv 仍然是一个更好、更整洁的解决方案!

829

你需要的就是 --target 这个选项:

pip install --target d:\somewhere\other\than\the\default package_name

不过,你还需要把 d:\somewhere\other\than\the\default 加到 PYTHONPATH 里,这样才能从那个位置使用这些包。

-t, --target <dir>
把包安装到 <dir> 目录下。默认情况下,这不会替换 <dir> 里已有的文件或文件夹。
如果想用新版本替换 <dir> 里的已有包,可以使用 --upgrade。


如果没有这个目标选项,可以升级 pip:

在 Linux 或 OS X 上:

pip install -U pip

在 Windows 上(这个方法可以解决 一个问题):

python -m pip install -U pip
369

使用:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

你可能还想用 --ignore-installed 这个选项,强制所有依赖项重新安装,使用这个新的前缀。你可以多次使用 --install-option 来添加任何你可以在 python setup.py install 时使用的选项(--prefix 可能是你想要的,但还有很多其他选项可以使用)。

撰写回答