gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:55:51 25 4
gpt4 key购买 nike

我有一台运行 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

有可能是操作系统升级或 Brew 升级破坏了我所有的虚拟环境,我现在才注意到,但这对我来说似乎很可疑。感谢您提前提供的帮助。

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

看来问题出在 python 二进制文件的模拟链接中。没有 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'

最佳答案

您的激活脚本是什么样的?它的主要目的是在 PATH 的开头插入 Python。

这是我的:

VIRTUAL_ENV="/Users/myuser/kds2/py2/venv38"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"

在运行 activate 之前,我在我的 PATH 中有这个(我使用一个实用程序逐行拆分它):

0 /Users/myuser/.cargo/bin
1 /Users/myuser/.nvm/versions/node/v10.15.0/bin
2 /opt/local/bin

激活后

0 /Users/myuser/kds2/py2/venv38/bin
1 /Users/myuser/.cargo/bin
2 /Users/myuser/.nvm/versions/node/v10.15.0/bin

所以,基本上,它所做的一切都是在 PATH 前加上 $VIRTUAL_ENV/bin

我建议您看一下激活并尝试查看它的作用。 $VIRTUAL_ENV 有什么问题吗?它确实硬编码到激活位置。

printf "\n$VIRTUALENV:$VIRTUALENV:\n" 可能会让您了解发生了什么。

VIRTUALENV=$(fnp $BASH_SOURCE/../..) 就可以做到这一点,

现在,接下来是您的实际目录是什么样的:

如果我 cd 在那个 venv 的正上方,我有这个树结构:

tree -d -L 2 venv

venv
├── bin
│   └── __pycache__
├── cx_Oracle-doc
├── include
├── lib
│   └── python3.6
├── man
│   └── man1
└── share
├── doc
├── jupyter
└── man

现在,您的可能有所不同。 3.6 可能是我剩下的。但是有一个目录结构,里面装满了文件。

让我们 cd 到 bin,即我在 activate-ion 之后的第一个 PATH 条目

ls -l python

(venv38) myuser@bin$ ls -l python
lrwxr-xr-x 1 myuser staff 9 May 29 13:15 python -> python3.8

这只是为了使其版本中立。

让我们ls -l python3.8

lrwxr-xr-x  1 myuser  staff  73 May 29 13:15 python3.8 -> /opt/local/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8

这是 macports 放置 Python 的地方。如果您使用的是 brew,它应该位于 /usr/local/ 之类的地方(我认为)。

是的,我可以启动它:

(venv38) myuser@bin$ python3.8
Python 3.8.1 (default, Jan 5 2020, 21:32:35)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

现在,其中任何一个都可能失败,但需要通过步骤来验证发生了什么:

  • 正在设置路径
  • venv/bin 内容
  • 在 venv/bin 中指向实际的 Python

然后您可以推断问题的原因。

而且,如果你想知道的是 3.7 还是 3.8 项目,也许你可以通过 rm python 然后 ln -s/usr/local/opt/python/bin/来修复python3.8 python.

但在此之前,请看一下 python 的时间戳,大概指向 3.7。符号链接(symbolic link)带有创建链接的时间。这会敲响警钟吗?那个时候你安装了什么东西吗?也许与 pip 有关?

现在,我已经让 Python 3.6/3.7/3.8 共存,几乎没有问题。但是,如果可以的话,也许可以考虑在 1 个版本上进行标准化,除非你让你的 venv 稳定下来?

关于Python venv 项目随机停止能够找到 python3 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63926784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com