多个python安装和pip,伙计,我的站点包在哪里?

Zeb*_*ebs 7 python macos homebrew pip python-2.7

众所周知,Mac OS预装了自己的python.

建议似乎是单独留下并使用自制软件将新的python安装到系统中.

我的问题是在使用自制软件安装python(和pip)之后,pip正在将软件包安装到Mac OS站点包而不是我自己的软件包中.我已经确认我正在运行"自制"点子:

$ which pip
/usr/local/bin/pip
Run Code Online (Sandbox Code Playgroud)

但是,当我pip安装的东西,我可以安装在以下位置:

/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

Pip应该安装在,/usr/local/lib/python2.7/site-packages除非我想念一些东西.

令人惊讶的是,检查-V产生了令人惊讶的结果:

pip -V
pip 7.1.0 from /usr/local/lib/python2.7/site-packages (python 2.7)
Run Code Online (Sandbox Code Playgroud)

pip list刚刚运行后运行pip install并没有显示那些据说刚刚安装的软件包,而是出现了错误的site-packages.

除此之外/lib/python2.7/site-packages,我的$ PYTHONPATH无法识别安装在其上的软件包,因此我无法使用它们.

为了增加更多的混淆,我决定使用virtualenv,但我很惊讶甚至使用与virtualenv活动的pip保持安装/lib/python2.7/site-packages而不是virtualenv站点包.

所以,不知怎的,我最终得到了一个自制的点子,它安装了自制网站包之外的包和一个不能使用pip安装的包的python解释器.

您如何建议我找到根本原因并获得流畅的Python体验?:)

Ray*_*Ray 1

我认为激活 virtualenv 后,你的 python 路径应该指向该环境站点包位置——如果不是,它可能没有激活。只有激活它后,您才会运行 pip,以便它安装在该虚拟环境的站点包中。如果它没有被激活,它将进入它已经知道的任何其他站点包中:

  • 第一步:创建虚拟环境
    • 啦啦...virtualenv venv
    • 只执行一次!
  • 第2步:激活虚拟环境
    • 就像是source /venv/bin/activate
    • 每次你想使用这个虚拟环境时都需要做
  • 第 3 步:运行 pip 命令,观察它们安装在虚拟环境站点包中!

如果您在步骤 2 之前执行步骤 3,那么您实际上并没有使用您创建的虚拟环境,那么所有的赌注都将被取消——这可能就是 pip 仍然安装到旧位置的原因。

现在,我的总体建议是更进一步,使用pyenv将特定版本的 python 安装到您的系统中/Users/username/.pyenv folder,并放弃默认的 OSX 和 homebrew 软件包。它很简单,您可以通过简单地发出命令来更改版本来轻松控制要使用的 python 的确切版本。

然后在 python2 中使用 virtualenv 或pyvenv在 python3 中使用 virtualenv (不要与 pyenv 混淆)使用自己的本地站点包构建虚拟环境来存储 pip 模块。当您激活 virtualenv 时,您的 $PYTHONPATH 将切换到特定位置。

那么流程将是:

  • 使用 pyenv 下拉并切换到您想要使用的特定 Python 版本——覆盖 homebrew 和 OSX 版本。
  • 创建您的 vitrualenv。这将创建一个 bin,它将链接到您刚刚在上一步中指定的 pyenv python 堆栈。
  • 激活虚拟环境,然后继续。

完全控制您的环境!