如何使用 Pip (OS X) 在虚拟环境中安装 Python 包
Posted
技术标签:
【中文标题】如何使用 Pip (OS X) 在虚拟环境中安装 Python 包【英文标题】:How to install a Python package inside a virtual environment with Pip (OS X) 【发布时间】:2019-07-04 21:53:03 【问题描述】:编辑: 我将结束这个问题,因为它发生的原因与我最初的假设不同,重新提出这个问题会更清楚:
Pip installs packages in the wrong directory with virtualenv
accepted answer 不直接回答原始问题,但提供了一个非常有用的概述。
根据下面的讨论,问题是即使在
$ source ~/PycharmProjects/Practice/venv/bin/activate
$ pip install numpy
numpy 安装在/usr/local/lib/python2.7/site-packages
这可能是什么原因?
原文:
通过 Homebrew 在 OS X 上使用 Python:
我一天中的大部分时间都在尝试解决这个问题,但要么我收到 must supply either home or prefix/exec-prefix -- not both
错误,要么我尝试安装的软件包完全放错了地方:
$ pip3 --version
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
$ cd venv
$ pip3 install numpy
..... [snip with following error:]
"must supply either home or prefix/exec-prefix -- not both")
使用这个hint
$ pip3 install numpy -t .
然后我得到一个新的错误,
`Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/.../pip-install-0fvveq3v/package/'
搜索 SO 提供了涉及pip install setuptools 的各种可能性。但pip install
抛出上述错误或安装在错误的位置。即解决方案首先涉及导致错误的东西。
我尝试使用 Python.org 安装程序,但它根本没有安装 pip。 (自定义安装程序显示已选中但大小为零的选项)。
【问题讨论】:
你不是在virtualenv中,你是不是误退出了 你需要source venv/bin/activate
而不是cd venv
@Gazzer 只需执行source ~/PycharmProjects/Practice3/venv/bin/activate
。你不需要自己去那里。之后,您的pip
命令将指向虚拟环境中的二进制文件,所以只需执行pip install numpy
。
你是如何创建虚拟环境的?
一旦你activate
pip
命令会做正确的事,不需要任何选项。
【参考方案1】:
此nice tutorial 提供了介绍性概述。这是good summary 的详细信息。但是,如果您在创建虚拟环境目录后renamed 或moved,它可能会破坏它。从头开始创建一个新的:$ cd ~/PycharmProjects; python3 -mvenv newenv
;激活:$ source newenv/bin/activate
;安装一些东西:$ pip install colorama
(与pip3 install
相同,仅当venv激活时);检查:ls ~/PycharmProjects/newenv/lib/python3*/site-packages
;停用:$ deactivate
那么你可以试试这个 Pycharm 的解决方案:how to associate a virtual environment with a python project in pycharm。 PyCharm 确实与 virtualenv
捆绑,可以自定义,请查看 Pycharm 特定资源:Pycharm 中的 creating virtual environments 和 installing packages。
如果您安装了 PyPI 的主流 virtualenv,默认情况下它将使用安装了 virtualenv
的 python 解释器创建新环境。但是可以在创建新环境时specify 替代 Python 解释器:$ virtualenv -p python3.7 newenvname
关于错误DistutilsOptionError: must supply either home or prefix
- 请查看this 和this 以获取解决方案。 python 和 pip 之间的自制映射是described here。在自制 Python 中,正常的 pip install --user
是 disabled,但有一些解决方法。 MacOS system Python 不提供pip
,但可以为任何特定的python 版本manually 安装、重新安装或升级。原始的非酿造安装程序也适用于所有 Python 版本:https://www.python.org/downloads/mac-osx/
默认情况下没有pip.conf
,但可以手动创建它以自定义事物。所有可能的 pip.conf 位置(每个用户、每个 venv 和全局/系统范围,以及它们如何相互覆盖)都是 listed here。如果有人遇到问题,他们可以使用pip config list
command 来查看他们的活动配置,或者使用locate pip.conf
和find
来查看。
最后,您可能需要确保您没有针对 macOS 的系统 python 使用 pip
。 $ brew info python
、which pip
、which pip3
、pip3 -V
、which python3
等 Shell 命令可以帮助您查看实际使用的内容。由于 macOS 默认 $PATH 曾经是 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
,因此库存 macOS 二进制文件(包括 python)可能优先于某些自制安装(包括 python)。如果是这样,如果需要,可以通过 ~/.bashrc
导出自定义 PATH。
【讨论】:
谢谢,但还是同样的问题。pip install colorama
将包放入 /usr/local/lib/python2.7/site-packages/
是否有任何不可见的 home 设置可能导致 Python 将其放在这里?
@Gazzer 你已经用brew
安装了python?
是的,使用 Brew。
@Gazzer 那么这是known issue 和brew
。
这解释了"must supply either home or prefix/exec-prefix -- not both")
问题,但不是 pip 安装问题。 (而且这个问题不仅仅是 Brew - 它发生在常规 python 安装中)以上是关于如何使用 Pip (OS X) 在虚拟环境中安装 Python 包的主要内容,如果未能解决你的问题,请参考以下文章