如何:使用Macports选择Python

36

当我输入:

port select --list python
这是结果:
Available versions for python:
    none
    python25 (active)
    python25-apple
    python26-apple
    python27
    python27-apple
我原以为使用 Python 时会使用版本 2.5,但是当我输入“python”时,似乎激活的是版本 2.7。如何将其更改为版本 2.5?
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

2
你确定你没有使用预安装的Python吗?“which python”返回什么? - Frank Schmitt
1
可能是预安装的Python:/usr/bin/python。 - kadrian
5个回答

47
osx$ port select --list python

列出您可用的Python安装程序。

然后使用“--set”选项来“端口选择”以设置您想要使用的端口。

osx$ sudo port select --set python python27

8
注意:此答案并非严格回答原问题。然而,它回答了我来到这个页面的问题,即如何选择哪个端口是活动的。 - lindes

32

为什么会发生这种情况

默认情况下,MacPorts将二进制文件安装在/opt/local

你的Mac上也有一个预安装的Python版本。当只输入python启动时,它会启动未受MacPorts安装影响的预安装Python版本。

要查看只键入Python时将执行哪个版本,请使用:

which python

使用以下命令启动Mac Ports版本:

/opt/local/bin/python2.5

解决方案

如果您希望始终使用MacPorts二进制文件,可以更改您的路径,使得/opt/local/bin出现在/use/local/bin之前等位置。

MacPorts会在~/.tcshrc中添加/opt/local/bin等内容。还要确保查看~/.profile和~/.bash_profile,因为它们是Mac上的默认设置。

选择端口中的版本

首先,输入port select --list python以列出已安装的版本,然后例如键入sudo port select --set python python27以选择2.7版本。要获取更多信息,请键入port help select


3
通常的MacPorts用户会在系统目录之前将/opt/local/bin添加到他们的路径中,以便使用由Port Select提供的Python版本。你可能需要在它之后手动添加/opt/local/bin到您的路径中。 - mmmmmm
2
请将 /opt/local/bin 放在 /usr/bin 之前。在 .profile 或 .bash_profile 中设置路径,例如:PATH=/opt/local/bin:$PATH,然后重新启动 Terminal.app 或重新读取您更改的文件。如何选择所需的 Python 的答案在此处找到:https://dev59.com/zG025IYBdhLWcg3wRDm8 - boerre
1
我不知道为什么会有人踩这个问题,也许是因为有人把csh.whynot当真了,或者误解了问题是关于如何使用 port select?无论如何,你可以改进问题的方法之一是更多地提到如何在其他 shell 中更改路径。毕竟,在 Mac 上,(t)csh 不是默认 shell。因此,提到 .profile.bash_profile 等等,都将有助于你的回答变得更好。 - lindes
@lindes 好的,谢谢。我更新了答案。如果我有误解什么,请随意编辑。 - vidstige
1
据我所知,MacPorts 在安装时会自动将 /opt/local/bin 放在 /usr/local/bin 之前,因此这不太可能是真正的问题(尽管在 OP 的情况下可能是如此),最好使用 sudo port select --set python python27 来解决该问题(有关更多详细信息,请参见 easyE 的答案)。 - JobJob
显示剩余6条评论

9

您的shell可能会缓存python的调用,不会再次查找PATH。因此,在同一shell会话中在调用port select之前调用python时,您需要清除此缓存。

对于bash,请使用以下命令清除缓存:

hash -r

或者简单地打开一个新的终端窗口。

我发现在调用“错误”的版本后,使用端口选择,然后再次尝试时,尽管可执行文件的路径正确,它仍会调用错误的版本。因此,这个答案本身可能不是最好的,但可以与上面的其他答案结合使用。 - Paul

5

Python安装到以下路径:

  • 默认路径(Apple):/usr/local/bin
  • MacPorts:/opt/local/bin
  • python.org:/Library/Frameworks/python...

系统需要默认的Python,因此最好不要过多干扰它。使用MacPorts Python很方便,因为包的获取非常容易。

您可以将链接设置为快捷方式:

sudo ln -s /opt/local/bin/python /usr/local/bin/ppython

然后从命令行使用MacPorts版本:

ppython script.py

0

另一种方法是为每个Jupyter二进制文件创建符号链接,以便版本号不会出现:

cd /opt/local/bin
JUPYTER_VERSION=2.7
for a in jupyter*$JUPYTER_VERSION; do sudo ln -s $a $(echo $a | sed -e 's:-'$JUPYTER_VERSION':g'); done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接