【问题标题】:how can I make a symbolic link to python3 created by venv on OS X?如何在 OS X 上创建指向由 venv 创建的 python3 的符号链接?
【发布时间】:2019-01-01 15:52:16
【问题描述】:

Matplotlib 现在需要将 python 作为框架安装以在交互模式下使用它 (Working with Matplotlib on OSX),我这样做是:

python -m venv my-virtualenv
source my-virtualenv/bin/activate

这很好用。例如,如果我这样做:

my-virtualenv> pip3 install tensorflow

在这个新环境中,它可以很好地构建 tensorflow,当我进入 my-virtualenv 中的 python3 shell 时,我可以很好地导入它。但是,当我创建符号链接时:

ln -s my-virtualenv/bin/python3 /usr/local/bin/python36x

然后输入 python36x shell tensorflow 例如不可用。我试过了

python -m venv --copies my-virtualenv

也无济于事。如何创建功能符号链接?

【问题讨论】:

  • 你为什么要创建那个符号链接?你期望它实现什么?您是否尝试使用 virtualenv 而不激活它?
  • 我忘了说我正在使用 Pycharm。如果我如上所述设置虚拟环境并将 Pycharm 的解释器指向它工作的虚拟环境中的解释器 - 它有效地激活了环境。但是,如果我将它指向解释器的符号链接,它就会失败。如果我使用 virtualenv(而不是 venv)来设置虚拟环境,则符号链接可以工作,但是 Matplotlib 会失败,因为它现在需要 python 在框架中(由 venv 创建)。

标签: macos matplotlib pycharm symlink python-venv


【解决方案1】:

Python3 的 venv 创建到虚拟环境的 bin/python 的链接,而不是像 virtualenv 那样复制文件。 Python2 的加载器将跟踪链接,直到找到实际的 python 可执行文件,然后使用该目录来定位库 (../lib/)。 Python3的加载器不跟随链接,而是使用python的目录(链接与否)来定位库。

您可以使用别名代替链接:

alias python36e=my-virtualenv/bin/python3

它不在路径上,但可以直接访问。

更好的解决方案是将包装脚本放在您的路径上。

# cat /usr/local/bin/python36x
myprog=my-virtualenv/bin/python3

exec "${myprog}" "$@"

HTH

【讨论】:

    【解决方案2】:

    好的,Pycharm 实际上有自己的处理方式:参见how to set the interpreter to use across multiple platforms。 Pycharm 很不错!

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 2011-09-26
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      相关资源
      最近更新 更多