在 Mac OS 上管理 python 个包

Manging python packages on Mac OS

我正在 Mac 使用 macports 安装 python3。我决定遵循 macports 路径而不是直接 Python3 download/install 以使其与 Apple 的本机 Python 安装分开。我选择了 Python36,因为它与最近添加的 LabView python 节点兼容。

从那时起,我通过 macports 添加了许多其他软件包:numpy、scipy、Pillow、matplotlib、pandas、jupyter、spyder,...所有依赖项都得到了处理,一切都按预期工作。我什至安装了 PIP (py36-pip),尽管我从未使用过它。

当我尝试安装 "jupyter_contrib_nbextensions" 时出现问题。该包未显示为可用 "macport"。不情愿地,我尝试了 PIP ...一切似乎都很好,但在构建阶段收到了大量错误消息。

我在想。当通过 macports 安装主 python 时,安装附加 python 软件包的正确协议是什么?

  1. 也许,安装 python 3.x 和相应的 PIP 并使用 PIP 而不是 macports 管理所有其他包?当然,所有 python 包都必须通过 PIP 更新(目前所有内容都通过 macports 更新,简单方便)。

  2. ... 或者,由于 jupyter_contrib_nbextensions 是目前为止我能找到的唯一无法使用的软件包,破解它并以某种方式安装 "manually"?

  3. 还有别的吗?

感谢您的见解。

干杯, 拉德克


(深夜)更新:

在阅读了关于多个 python 版本的大量文章后:https://realpython.com/intro-to-pyenv/ 我决定从 macports 中删除所有 python 包(真的有点可怕,但是上述网站上的文字 合理 清晰)。请注意,仍然需要 macportshomebrew 来安装和构建 pyenv

安装 pyenv 后,构建 python3.6 需要一段时间。我现在可以在 python 版本之间切换,设置为 globally(任何目录)或 locally(仅在该目录中)。

PIP 有点令人沮丧,因为它没有安装在 "system" python(在 /usr/bin 中),而是安装在 3.6 上。我只是在我的本地 3.6 版本中安装 jupyter ....接下来会进行扩展。

一切顺利。

pyenv一路走好! R>

问题是 PIP 正在使用哪些?当 PIP 的一个版本(例如系统版本)以某种方式与 Python 的多个版本相关联时,问题通常就开始了。在使用 PythonMacPorts 版本时避免它的最佳方法是始终使用它的 PIP 版本。

关于多版本管理Python;如果在 Python 版本之间切换时使用 port select,则很容易管理。我有一个 ~/.bash_profile 函数,它使我可以非常轻松地在 Python 的多个版本及其 PIP.

版本之间来回切换

例如:

~/.bash_profile

# MacPorts Python and PIP version selection
py() { [[ "" = "2" ]] && sudo port select --set python python27 \
&& sudo port select --set pip pip27 && kill -INT $$ && alias pip=pip2; \
[[ "" = "3" ]] && sudo port select --set python python36 \
&& sudo port select --set pip pip36 && kill -INT $$ && alias pip=pip3; \
echo "Invalid Python version selected." ; }

这样使用:

$ py 2 # switches to Python 2.7 and PIP 2.7
$ py 3 # switches to Python 3.6 and PIP 3.6

检查版本:

$ python -V
Python 3.6.9

$ pip --version
pip 19.3.1 from /opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pip (python 3.6)

当所有内容都在同一个页面上时,管理方面会好很多。