Pipenv在Mac上安装Flask'没有此类文件或目录错误'

时间:2020-10-16 11:37:52

标签: python flask pipenv

非常不熟练,非常新,非常在我的班级学生中做关于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,因此我认为值得一提。

Screenshot

1 个答案:

答案 0 :(得分:0)

在创建虚拟环境时,Pipenv 只会创建一个符号链接,指向您告诉它使用的任何 python 安装。因此,在 Mac 上,如果您使用 Homebrew 中的 python,那么虚拟环境将只包含指向 Homebrew 安装的 Python 的符号链接(通常在 /usr/local/opt/ 中)。然后,您遇到的错误发生在:

  1. 您使用特定的 Python 安装创建虚拟环境
  2. 不知何故,Python 安装被卸载或移动到不同的路径
  3. 您使用相同的虚拟环境并执行 pipenv install

演示:

  1. 我已经使用 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"
    
  2. 检查虚拟环境 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
    
  3. 不小心卸载了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
    
  4. 现在,当您调用 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.

所以..

  1. 直接进入目录删除旧的虚拟环境

    TEMP$ pipenv --rm
    Removing virtualenv (/Users/cerberus/.venvs/TEMP-fjWX8BKZ)...
    
  2. 重新检查您的 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
      
  3. 重新安装所有东西,但指定 python 的路径

    TEMP$ pipenv install --dev --python=/usr/local/opt/python@3.7/bin/python3
    
    • --python 告诉 Pipenv 使用哪个版本的 Python(并为其创建符号链接)
    • 如果您要更改 Python 版本,请编辑您的 Pipfile。这将消除一开始的警告“您的 Pipfile 需要 python_version X.Y,但您使用的是 A.B.C
      [requires]
      python_version = "3.7"  
      
  4. 检查

    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