首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Pipenv不能为我的venv找到正确版本的python?

为什么Pipenv不能为我的venv找到正确版本的python?
EN

Stack Overflow用户
提问于 2021-11-07 23:15:31
回答 2查看 1.1K关注 0票数 1

我需要一点帮助来解决我的一个静脉问题。

TLDR

使用pipenv创建新的虚拟环境后,运行pipenv run python --version将返回以下消息,同时返回错误的python版本:

代码语言:javascript
运行
复制
Warning: the which -a system utility is required for Pipenv to find Python installations properly.
  Please install it.
Python 3.9.7 <--- this should be 3.8.5

激活虚拟环境,然后运行python --version将显示正确的版本,但这会阻止我通过pipenv run <any command>运行任何未激活的via,还会引起对某些事情不太正确的怀疑。这是在MacOS Big 11.6上

我的过程

  1. pyenv install 3.8.5安装我想要的python版本
代码语言:javascript
运行
复制
$ pyenv install 3.8.5                                                             
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.5.tar.xz...
-> https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
Installing Python-3.8.5...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.5 to /Users/<me>/.pyenv/versions/3.8.5

pyenv versions输出

代码语言:javascript
运行
复制
* system (set by /Users/<me>/.pyenv/version)
  3.6.4
  3.6.7
  3.8.12
  3.8.5
  3.9.1
  1. 创建新环境并使用pipenv install --dev从Pipfile安装reqs。Pipfile
代码语言:javascript
运行
复制
[requires]
python_full_version = "3.8.5"

输出:

代码语言:javascript
运行
复制
Creating a virtualenv for this project...
Pipfile: /Users/<me>/dev/<project>/Pipfile
Using /Users/<me>/.pyenv/versions/3.8.5/bin/python3.8 (3.8.5) to create virtualenv...
⠦ Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 325ms
  creator CPython3Posix(dest=/Users/<me>/.local/share/virtualenvs/<project>-OYt9MQn5, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/<me>/Library/Application Support/virtualenv)
    added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment! 
Virtualenv location: /Users/<me>/.local/share/virtualenvs/<project>-OYt9MQn5
Installing dependencies from Pipfile.lock (62a518)...
     ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 108/108 — 00:00:50
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
  1. 尝试运行pipenv run python --version (它找错了一个):
代码语言:javascript
运行
复制
$ pipenv run python --version
Loading .env environment variables...
Warning: the which -a system utility is required for Pipenv to find Python installations properly.
  Please install it.
Python 3.9.7
  1. 激活shell,运行上面的命令(具有相同的输出),或者只运行python --version,因为shell现在被激活了,它找到了正确的版本:
代码语言:javascript
运行
复制
(<project>) $ pipenv shell 
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Loading .env environment variables...
Launching subshell in virtual environment...
 . /Users/<me>/.local/share/virtualenvs/<project>-OYt9MQn5/bin/activate
N/A: version "N/A -> N/A" is not yet installed.

You need to run "nvm install N/A" to install it before using it.
 $  . /Users/ckz8780/.local/share/virtualenvs/<project>-OYt9MQn5/bin/activate
(<project>) $ python --version 
Python 3.8.5
(<project>) $

FWIW,我有其他几个静脉,我创造了完全相同的方式(或者说,我认为),这是很好的工作。在这些venv中,当我在venv被停用时运行pipenv run python --version时,which -a错误并不存在,并且他们找到了正确的python版本。事实上,即使我激活了那些venv中的shell并运行pipenv run python --version,它仍然可以正常工作,并找到正确的一个。这些venv的唯一区别是python版本(两个使用python v3.6.x,两个使用python v3.8.9)。它们都像预期的那样工作,但是不管我做什么,这个版本似乎都找不到正确的版本。我正在拔头发。

任何帮助都将不胜感激!

谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-02-08 10:47:34

在安装Python (同时使用Pyenv和Pipenv)时,我有一个类似的工作流。

这是为我工作的:

  1. 用Pyenv安装新的Python版本:
代码语言:javascript
运行
复制
pyenv install 3.9.0
  1. 运行pyenv壳
代码语言:javascript
运行
复制
pyenv shell 3.9.0
  1. 在pyenv shell中,通过pip安装pipenv。
代码语言:javascript
运行
复制
pip install pipenv
  1. 用琵琶装包..。
代码语言:javascript
运行
复制
pipenv install ...
  1. 最后,使用Pyenv的Python版本通过Pipenv创建一个虚拟via:
代码语言:javascript
运行
复制
pipenv shell 3.9.0

输出:

代码语言:javascript
运行
复制
Pipfile: /Users/fabianmeyer/Desktop/analytics/Pipfile
Using /Users/fabianmeyer/.pyenv/versions/3.9.0/bin/python3.9 (3.9.0) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.9.0.final.0-64 in 1824ms
  creator CPython3Posix(dest=/Users/fabianmeyer/.local/share/virtualenvs/analytics-GC4g190F, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/fabianmeyer/Library/Application Support/virtualenv)
    added seed packages: pip==22.0.3, setuptools==60.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment! 
Virtualenv location: /Users/fabianmeyer/.local/share/virtualenvs/analytics-GC4g190F
票数 1
EN

Stack Overflow用户

发布于 2021-11-08 00:13:53

pipenv GitHub问题复制答案

这不是pipenv的工作方式,您不能调用它从它正在管理的虚拟环境中运行某个东西。Pipenv安装在虚拟环境的外部,这意味着您使用pipenv run的方式与使用pipenv install的方式相同--而不直接激活环境。这也是pipenv存在的原因之一,这样您就不必激活环境,甚至不必担心它们在哪里--这是为您处理的。 由于pipenv没有安装在它管理的环境中,这是有意义的。我要结束这个问题,因为它不是pipenv的问题,而且这个信息包含在其他一些问题中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69877245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档