在OSX上使用系统Python的Pip

7 投票
5 回答
20693 浏览
提问于 2025-04-16 18:30

我通过macports安装了python26,所以我系统上正确的python路径是 /opt/local/bin/python

但是,当我执行

sudo pip install <packagename>

时,它给我的结果是

sudo pip install <somepackage>                                           
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/pip-1.0.1-py2.6.egg/pip/basecommand.py", line 126, in main
    self.run(options, args)
  File "/Library/Python/2.6/site-packages/pip-1.0.1-py2.6.egg/pip/commands/install.py", line 215, in run
    import setuptools
ImportError: No module named setuptools

Storing complete log in /Users/navin/.pip/pip.log

所以,我怀疑它在使用系统自带的python。我已经按照网站的说明安装了distribute(里面包含setuptools)。我也通过安装程序安装了pip。我想我不小心把系统python的setuptools搞坏了,所以现在才会出现这个问题 :(

我该怎么做才能让pip再次正常工作呢?

5 个回答

3

这是我在使用macports时,让pip正常工作的设置,并把py26-pip设为默认的pip。

sudo port install py26-pip && sudo port select --set pip py26-pip

安装完成后,可以运行这个命令来查看pip的帮助信息。

pip --help

之后,你可能需要更新你的路径,以便包含pip安装的bin文件。可以编辑.bash_profile文件,加入类似下面的内容。

export PATH=/opt/local/bin:/opt/local/sbin:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:$PATH
14

更新: 我强烈建议通过从源代码构建来安装 CPython(示例),然后创建虚拟环境来进行开发。


总结一下,使用 Macports 安装 pip 的过程如下:

sudo port install py39-pip

这会安装一个名为 py39-pip 的 MacPorts 端口。

但是,并没有安装 /opt/local/bin/pip,而且 port select pipport select py27-pip 都会失败(与 port select python 不同)。不建议在其他发行版的 bin 目录中进行更改。

需要注意的是,以下路径中的 Python 文件:

  • /usr/bin 是 macOS 预装的 Python
  • /usr/local/bin 是由 MacPython 安装的,可以从 python.org 获取
  • /opt/local/bin 是由 MacPorts 安装的。

实际的可执行文件可以通过对每个上述 bin 目录中的各种与 Python 相关的符号链接使用 ls -ls 命令找到。

为了确保系统优先调用 MacPorts 安装的 Python,需要将 /opt/local/bin 放在 运行环境的 PATH 中,位置要在 /usr/bin/usr/local/bin 之前。这可以在 ~/.bash_profile~/.bashrc 文件中完成(具体使用哪个文件取决于你的系统和配置)。例如,在 ~/.bashrc 文件的最后写入

export PATH=/opt/local/bin:$PATH

将会产生这个效果(假设你使用的 shell 会读取 ~/.bashrc 文件)。

在路径正确设置后,系统仍然无法在 Macports 的 bin 目录中找到 pip 命令,因为它被安装为 /opt/local/bin/pip3.9。文件 /opt/local/bin/pip 不会自动创建。

因此,系统会继续在 PATH 中查找,如果例如 MacPython 在某个后面的位置被添加到路径中并且安装了 pip,那么那个 pip 就会被找到。

可以通过上面提到的命令来避免这种情况:

sudo ln -s /opt/local/bin/pip3.9 /opt/local/bin/pip
12

要从 /usr/local/bin 删除 pip,可以使用命令 sudo rm /usr/local/bin/pip

如果你是通过 macports 安装的 pip,输入 which pip 后应该会显示 /opt/local/bin/pip。如果没有显示这个路径,可以按照 这里的说明重新安装 pip。只要 which python 显示的是 /opt/local 的安装路径,应该就没问题。如果不行,你可能需要修改一下你的 PATH 环境变量。

撰写回答