python - 为什么 pipenv 告诉我错误的 python 版本?
问题描述
我使用以下方法创建了一个虚拟环境:
mkvirtualenv env_name --python=python3.9
然后我尝试从 Pipfile 安装:
pipenv install --dev
但我收到以下错误:
pipenv.patched.notpip._internal.exceptions.UnsupportedPythonVersion: pylint requires Python '~=3.6' but the running Python is 2.7.17
我检查了我的 python 版本,它是正确的:
$ python --version
Python 3.9.1
为什么它告诉我我的 python 版本是 2.7.17?当我使用以下命令安装时,不会发生这种情况:
pip install pylint==2.7.2
解决方案
首先,让我们阐明用于pipenv
管理虚拟环境的工作流程。
使用pipenv
,您无需使用mkvirtualenv
或使用您拥有的任何 virtualenv 实用程序单独创建虚拟环境。基本流程是简单地做pipenv install
:
克隆/创建项目存储库:
$ cd myproject
从 Pipfile 安装,如果有的话:
$ pipenv install
或者,将一个包添加到您的新项目中:
$ pipenv install <package>
这将创建一个
Pipfile
如果不存在。如果确实存在,它将自动使用您提供的新包进行编辑。接下来,激活 Pipenv shell:
$ pipenv shell $ python --version
这将产生一个新的 shell 子进程,可以使用 exit 将其停用。
这应该创建虚拟环境并在一个命令中安装您的依赖项。自动创建的虚拟 env 文件夹基于您运行命令的当前目录的路径:
- virtualenv 以项目根目录的名称加上项目根目录的完整路径的哈希值(例如,
my_project-a3de50
)全局存储。- 如果您更改项目的路径,则会破坏这种默认映射,并且 pipenv 将不再能够找到和使用项目的 virtualenv。
我猜您mkvirtualenv
单独执行的原因是控制虚拟 env 文件夹的存储/管理位置。pipenv
也为此提供了选项:
Pipenv 自动尊重
WORKON_HOME
环境变量,如果你设置了它 - 所以你可以告诉 pipenv 将你的虚拟环境存储在你想要的任何地方,例如:$ export WORKON_HOME=~/.venvs
project/.venv
此外,您还可以通过设置PIPENV_VENV_IN_PROJECT
环境变量让 Pipenv 将 virtualenv 插入。
从你尝试过的
$ mkvirtualenv env_name --python=python3.9
mkvirtualenv参考说这意味着“在文件夹中创建一个”。当你这样做时,它不会使用相同的虚拟 env 目录,因为如上所述,它会根据“项目根目录的名称加上项目根目录的完整路径的哈希”自动生成虚拟 env 目录. 所以无论发生什么都被忽略。env_name
WORKON_HOME
pipenv install
env_name
您只需pipenv
设置WORKON_HOME
文件夹,然后pipenv install
应该在同一文件夹下创建您的虚拟环境。每次你需要激活它时,你cd
进入你的项目目录,然后执行pipenv shell
.
现在,对于 Python 版本问题。默认情况下,当你这样做时pipenv install
,它会使用 Pipfile 中列出的任何内容python_version
,例如:
[requires]
python_version = "3.8"
它会扫描您的系统并寻找兼容的 python 安装。现在,您似乎已经有了一个现有的 Pipfile "2.7"
。或者可能已经有一个现有的虚拟环境(由先前的pipenv install
调用创建并使用 Python 2.7)。无论如何,即使您使用 Python 3.9 编辑了mkvirtualenv
一个env_name
,正如我已经提到的那样,那个会被忽略,并且pipenv
仍然使用 Python 2.7 版本,这会导致该错误:
pipenv.patched.notpip._internal.exceptions.UnsupportedPythonVersion: ...
要解决此问题,请使用以下命令删除任何预先存在的虚拟环境重新开始--rm
:
$ cd yourproject
$ pipenv --rm
Removing virtualenv (/path/to/.venvs/myproject-wv1hzz4Y)...
然后检查您现有的 Pipfile 是否在python_version
.
[requires]
python_version = "3.9"
pipenv install
通常,如果您最初使用正确,则不必手动设置版本。要指定正确的版本,您需要传入一个--python
选项,类似于您所做的mkvirtualenv
:
$ python3 -V
Python 3.9.2
$ which python3
/usr/local/bin/python3
$ pipenv install --python=/usr/local/bin/python3
Creating a virtualenv for this project...
...
Using /usr/local/bin/python3 (3.9.2) to create virtualenv...
$ pipenv shell
$ python -V
Python 3.9.2
如果还没有 Pipfile,pipenv
将创建一个并python_version
正确设置。
推荐阅读
- django - 我正在寻找一个库,它允许 Django 用户对 API 进行 OAuth 身份验证,并且 Django 可以访问他们的数据
- node.js - 如何在 Firestore 中调用 Async 和 Await
- swift - 调整大小时 SwiftUI macOS 极端滞后窗口
- api - REST API:验证 GET 请求中的请求参数?
- python - Plotly - 如何在折线图的 Y 轴上添加行数?
- c - 为什么分配给我的 malloc 的内存会被覆盖?
- mysql - MySQL Init SQL 文件没有被挂载
- python - 使用 Python 从 ai.onnx.ml 导入运算符
- angular - 必须为表单控件提供一个值,名称为:'invoice_name'?
- api - NetSuite Rest 集成 - 按日期获取销售记录