python:了解多个版本、符号链接和 virtualenv

Posted

技术标签:

【中文标题】python:了解多个版本、符号链接和 virtualenv【英文标题】:python: Understanding multiple versions, symlinks, and virtualenv 【发布时间】:2019-05-15 19:13:04 【问题描述】:

我需要帮助了解我的 MacOS 10.12 上的 Python 版本的组织。我有pipbrew,没有conda。在我使用 Python 3.6.5 之前,但后来 brew 更新并安装了 Python 3.7.0。

然后我在尝试创建新的虚拟环境时遇到了以下问题:

$ virtualenv venv_pointnet
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python3/bin/python3.6: bad interpreter: No such file or directory

然后我将此行添加到我的~/.bash_profile

alias python3="/usr/local/Cellar/python/3.6.5/bin/python3.6"

但问题依然存在....

这是我系统上的一些 Python 信息。

$ head -1 $(which virtualenv)
#!/usr/local/opt/python3/bin/python3.6

$ python3 --version
Python 3.6.5

$ which -a python3
/usr/local/bin/python3 

$ ls -l /usr/local/bin/python3
lrwxr-xr-x  1 myUser  admin  34 Oct 28 21:51 /usr/local/bin/python3 -> ../Cellar/python/3.7.0/bin/python3

$ ls -l /usr/local/opt/python3
lrwxr-xr-x  1 myUser  admin  22 Oct 28 21:51 /usr/local/opt/python3 -> ../Cellar/python/3.7.0

我的问题

    为什么好像有多个python3,而$which -a python3却只返回一个目录?

    如果我当前的 python3 版本是 3.6.5,这要归功于别名,那么为什么仍然有指向 3.7.0 的符号链接?

    如何使我的virtualenv 工作?它的解释器还能保持 3.6.5 还是我必须将其更改为 3.7.0?

    brew 更新可能在 python 版本和符号链接方面“破坏”了哪些其他内容?

我知道这些问题很广泛,但是任何能帮助我更好地理解这个 python 环境的东西,我将不胜感激!除了用python语言编程之外,我对它的设置没有太多了解>.

【问题讨论】:

【参考方案1】:

1

因为/usr/local/bin/python3 是一个特定版本的符号链接

2

您创建了一个别名,但这实际上并没有更改/usr/local/bin/python3 的符号链接。不过,如果你真的想使用 3.6.5 版,你可以这样做:

rm /usr/bin/python3
ln -s /usr/bin/python3.6 /usr/bin/python3

创建相应的符号链接

3

我不相信您可以更改 virtualenv 的 python 版本。您可能想尝试重新安装它

4

¯\_(ツ)_/¯

【讨论】:

感谢您的回答!我不明白你的#3吗?使用virtualenv 创建新的虚拟环境将无法正常工作,因为它找不到 python 3.6 解释器... 我重新安装了virtualenv,现在又可以使用了,谢谢!

以上是关于python:了解多个版本、符号链接和 virtualenv的主要内容,如果未能解决你的问题,请参考以下文章

符号链接和硬链接有啥区别?

如何从Python更改符号链接的atime和mtime?

使用 INotify 监视具有多个符号链接的文件

windows下多个python版本共存

linux 静态链接和动态链接

Docker 所有版本都中招,重大漏洞允许攻击者访问主机文件系统