[英]Why can't Pipenv find the correct version of python for my venv?
我需要一些帮助来解决我的一个 venvs 遇到的问题。
使用pipenv
创建的全新虚拟环境,运行pipenv run python --version
返回以下消息,以及错误的 python 版本:
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
显示正确的版本,但这会阻止我在未激活 venv 的情况下通过pipenv run <any command>
内容,并且还会让人怀疑某些事情不太正确。 这是在 MacOS Big Sur 11.6 上
pyenv install 3.8.5
安装我想要的 python 版本:$ 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
Output 的pyenv versions
:
* system (set by /Users/<me>/.pyenv/version)
3.6.4
3.6.7
3.8.12
3.8.5
3.9.1
pipenv install --dev
。 Pipfile 包含[requires]
python_full_version = "3.8.5"
Output:
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.
pipenv run python --version
(它发现错误):$ 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
python --version
,因为 shell 现在已激活,它会找到正确的版本:(<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,我还有其他几个以完全相同的方式(或者我认为)创建的 venvs,它们工作正常。 在那些 venvs 中,当我运行pipenv run python --version
并停用 venv 时,不存在which -a
错误,他们找到了正确的 python 版本。 事实上,即使我在那些 venvs 中激活 shell 并运行pipenv run python --version
,它仍然可以正常工作并找到正确的版本。 这些 venvs 的唯一区别是 python 版本(两个使用 python v3.6.x,两个使用 python v3.8.9)。 它们都按预期工作,但无论我做什么,这个版本似乎都找不到正确的版本。 我正在拔头发。
任何帮助是极大的赞赏!!!
谢谢
在安装 Python(同时使用 Pyenv 和 Pipenv)时,我有一个类似的工作流程。
这对我有用:
pyenv install 3.9.0
pyenv shell 3.9.0
pip install pipenv
pipenv install ...
pipenv shell 3.9.0
Output:
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
从pipenv GitHub 问题复制答案:
这不是 pipenv 的工作方式,你不能调用它来从它管理的 virtualenv 内部运行一些东西。 Pipenv 安装在 virtualenv 外部,这意味着您使用
pipenv run
的方式与使用pipenv install
方式相同——无需直接激活环境。 这就是 pipenv 存在的部分原因,这样您就不必激活环境,甚至不必担心它们可能在哪里——这是为您处理的。由于 pipenv 没有安装在它管理的环境中,这是有道理的。 我将关闭此问题,因为它不是 pipenv 的问题,并且此信息包含在许多其他问题中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.