非常不熟练,非常新,非常在我的班级学生中做关于Udemy的Python教程。本教程要求使用Pipenv将Flask安装到一个空文件夹(我的文件路径/ Users / matthewnickolls / Desktop / Flask)。我正在使用zsh shell通过终端安装,但是在以下屏幕截图中显示了以下“无此类目录错误”消息
我可以看到错误是由于(假设是)创建虚拟环境的加载路径失败而导致的: (/ bin / sh:/Users/matthewnickolls/.local/share/virtualenvs/matthewnickolls-ydr5OSCv/bin/pip:/Users/matthewnickolls/.local/share/virtualenvs/matthewnickolls-ydr5OSCv/bin/p:错误的解释器:否这样的文件或目录)
但是我无法解决该问题。
我已经注意到在安装过程的早期有一个警告,我应该使用Python 3.7,但实际上,根据警告消息,我使用的是Python 3.9。我不知道自己使用的是3.9,以为默认值是3.7。
这会是问题吗?如果是这样,是否可以指定我希望Pipenv使用Python 3.7安装?
有关其他信息,我也很难按照同一家陀螺仪的说明安装Pipenv。最终,通过首先安装Homebrew(我根据Pipenv网页的建议安装了Homebrew),使用其他方法对其进行了管理。我不知道这是否与解决上述问题有关,但是鉴于我正在尝试安装Flask时使用的是Homebrew安装的Pipenv,因此我认为值得一提。
答案 0 :(得分:0)
在创建虚拟环境时,Pipenv 只会创建一个符号链接,指向您告诉它使用的任何 python
安装。因此,在 Mac 上,如果您使用 Homebrew 中的 python
,那么虚拟环境将只包含指向 Homebrew 安装的 Python 的符号链接(通常在 /usr/local/opt/
中)。然后,您遇到的错误发生在:
pipenv install
演示:
我已经使用 Homebrew 的 python@3.7 创建了一个虚拟环境
TEMP$ brew info python@3.7
...
Python has been installed as
/usr/local/opt/python@3.7/bin/python3
TEMP$ pipenv --py
/Users/me/.venvs/TEMP-fjWX8BKZ/bin/python
TEMP$ $(pipenv --py) --version
Python 3.7.9
TEMP$ cat Pipfile | grep python_version
python_version = "3.7"
检查虚拟环境 python
是否只是 brew 的 python@3.7
的符号链接
TEMP$ pushd $(pipenv --venv)/bin
~/.venvs/TEMP-fjWX8BKZ/bin ~/TEMP
bin$ ls -l python
lrwxr-xr-x 1 me staff 39 Jan 9 15:29 python -> /usr/local/opt/python@3.7/bin/python3.7
bin$ popd
~/TEMP
不小心卸载了python@3.7
(可能你在安装 Homebrew 时使用了 python@3
,它指的是 Homebrew 支持的任何最新 Python 版本。所以,你最初有 Python3.7,但后来你更新了它,但 Homebrew 的 python@3
现在是 Python3.9,它取代了你的 3.7 安装)
TEMP$ brew uninstall --ignore-dependencies python@3.7
现在,当您调用 pipenv
时,它将使用另一个 python
安装。在本例中,假设您安装了 Homebrew 的 python@3.9
:
TEMP$ brew install python@3.9
...
TEMP$ pipenv install Flask
Warning: Your Pipfile requires python_version 3.7, but you are using 3.9.1 (/usr/local/Cellar/pipenv/2/l/bin/python).
$ pipenv --rm and rebuilding the virtual environment may resolve the issue.
$ pipenv check will surely fail.
Installing Flask...
⠋ Installing...Failed to load paths: /bin/sh: /Users/me/.venvs/TEMP-fjWX8BKZ/bin/python: No such file or directory
Output:
⠙ Installing Flask...Failed to load paths: /bin/sh: /Users/me/.venvs/TEMP-fjWX8BKZ/bin/python: No such file or directory
Output:
Failed to load paths: /bin/sh: /Users/me/.venvs/TEMP-fjWX8BKZ/bin/python: No such file or directory
Output:
Error: An error occurred while installing Flask!
Error text:
/bin/sh: /Users/me/.venvs/TEMP-fjWX8BKZ/bin/pip: /Users/me/.venvs/TEMP-fjWX8BKZ/bin/python: bad interpreter: No such file or directory
✘ Installation Failed
在那里你会得到同样的错误,因为你的虚拟环境的 python
仍然符号链接到一些不再存在的 Python 安装。当您更改 Python 安装时 Pipenv 不会自动更新它(因为这不是它的工作)。使问题复杂化的是您现在从 Python 3.7(在您的 Pipfile 中注册)更改为不同的 Python 版本 3.9。
此类错误的解决方案通常很简单:只需使用现在处于活动/正确的 Python 安装中的任何内容重新创建您的虚拟环境。 Pipenv 甚至暗示了这一点:
Warning: Your Pipfile requires python_version 3.7, but you are using 3.9.1 (/usr/local/Cellar/pipenv/2/l/bin/python).
$ pipenv --rm and rebuilding the virtual environment may resolve the issue.
$ pipenv check will surely fail.
所以..
直接进入目录删除旧的虚拟环境
TEMP$ pipenv --rm
Removing virtualenv (/Users/cerberus/.venvs/TEMP-fjWX8BKZ)...
重新检查您的 Python 安装
我不知道您的 3.7 发生了什么,但重新安装它(并指定确切版本)会有所帮助
TEMP$ brew install --force python@3.7
获取路径
TEMP$ brew info python@3.7
...
Python has been installed as
/usr/local/opt/python@3.7/bin/python3
重新安装所有东西,但指定 python
的路径
TEMP$ pipenv install --dev --python=/usr/local/opt/python@3.7/bin/python3
--python
告诉 Pipenv 使用哪个版本的 Python(并为其创建符号链接)[requires]
python_version = "3.7"
检查
TEMP$ $(pipenv --py) --version
Python 3.7.9
TEMP$ ls -l $(pipenv --venv)/bin/python
lrwxr-xr-x 1 me staff 39 Jan 9 16:07 /Users/me/.venvs/TEMP-fjWX8BKZ/bin/python -> /usr/local/opt/python@3.7/bin/python3.7