Python venv项目随机停止能够找到python3二进制文件

问题描述

我有一个运行Catalina 10.15.6的Macbook Pro。

我在python venv环境失败方面一直遇到问题。

当我启动python项目时,我在项目目录中运行它:

python3 -m venv .

这将创建环境。我用. bin/activate激活了环境,运行which python3给了我这样的东西:

/Users/qotsa42/Projects/web/project_name/bin/python3

换句话说,它使用虚拟环境中的python二进制文件。一切都很好。

我的计算机上有几十个完全按照这种方式创建的项目。有时,出于没有明显原因且没有明显模式的情况,激活脚本不再加载python二进制文件。

例如,我刚刚尝试为几个月没有接触的项目激活环境。 which pip3给了我这个:

/Users/qotsa42/Projects/web/project_name/bin/pip3

但是which python3给了我这个:

/usr/local/bin/python3

我终生无法弄清是什么原因阻止了虚拟环境加载正确的python二进制文件。

在这个特定的项目中,我使我的main.py文件可执行,并在顶部将bash shebang指向虚拟环境的二进制文件。当我运行脚本时,它给了我这个:

/Users/qotsa42/Projects/web/project_name/bin/python3: bad interpreter: No such file or directory

进入故障环境的bin目录并执行ls -la可以使我做到这一点:

total 64
drwxr-xr-x  13 qotsa42  DOMAIN\Domain Users   416B Jul 23 13:54 ./
drwxr-xr-x  15 qotsa42  DOMAIN\Domain Users   480B Sep 16 12:41 ../
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   2.2K Jul 23 13:54 activate
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   1.3K Jul 23 13:54 activate.csh
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   2.4K Jul 23 13:54 activate.fish
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   269B Jul 23 13:54 easy_install*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   269B Jul 23 13:54 easy_install-3.7*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   260B Jul 23 13:54 pip*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   260B Jul 23 13:54 pip3*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   260B Jul 23 13:54 pip3.7*
lrwxr-xr-x   1 qotsa42  DOMAIN\Domain Users     9B Jul 23 13:54 python@ -> python3.7
lrwxr-xr-x   1 qotsa42  DOMAIN\Domain Users     9B Jul 23 13:54 python3@ -> python3.7
lrwxr-xr-x   1 qotsa42  DOMAIN\Domain Users    35B Jul 23 13:54 python3.7@ -> /usr/local/opt/python/bin/python3.7

现在,在虚拟环境仍然起作用的项目上,这是相同的ls -la命令:

total 136
drwxr-xr-x  19 qotsa42  DOMAIN\Domain Users   608B Sep 14 14:53 ./
drwxr-xr-x  13 qotsa42  DOMAIN\Domain Users   416B Sep 14 15:15 ../
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   8.6K Aug 31 12:00 Activate.ps1
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   2.2K Aug 31 12:00 activate
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   1.3K Aug 31 12:00 activate.csh
-rw-r--r--   1 qotsa42  DOMAIN\Domain Users   2.4K Aug 31 12:00 activate.fish
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   260B Sep 14 14:53 black*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   255B Sep 14 14:53 black-primer*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   261B Sep 14 14:53 blackd*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   270B Aug 31 12:00 easy_install*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   270B Aug 31 12:00 easy_install-3.8*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   256B Aug 31 12:01 f2py*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   256B Aug 31 12:01 f2py3*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   256B Aug 31 12:01 f2py3.8*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   261B Aug 31 12:01 pip*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   261B Aug 31 12:01 pip3*
-rwxr-xr-x   1 qotsa42  DOMAIN\Domain Users   261B Aug 31 12:01 pip3.8*
lrwxr-xr-x   1 qotsa42  DOMAIN\Domain Users     7B Aug 31 12:00 python@ -> python3
lrwxr-xr-x   1 qotsa42  DOMAIN\Domain Users    22B Aug 31 12:00 python3@ -> /usr/local/bin/python3

对OS或Brew升级的升级有可能破坏了我所有的虚拟环境,我现在才注意到,但这在我看来是可疑的。我先感谢您的帮助。

ALSO:过去,删除所有环境文件/目录并重新安装虚拟环境已解决了此问题,但我宁愿不处理所有可能的问题。

看来问题出在python二进制文件的simlinks中。 python3.7目录中没有/usr/local/opt/python/bin二进制文件,但是有python3.8个二进制文件。

运行/usr/local/opt/python/bin/python3.8 ./main.py可以运行,但是不会加载通过pip3安装的模块,即我 ModuleNotFoundError: No module named 'pyodbc'

运行python3 -m venv --upgrade .输出:

Error: [Errno 2] No such file or directory: '/Users/qotsa42/Projects/web/import_csv/bin/python3'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)