Python 3.11下创建Pipenv虚拟环境报错的解决咨询
问题描述
前置条件
- Python 3.11
- Pipenv 2022.12.19
尝试用以下命令创建Pipenv虚拟环境:
pipenv --python 3.11
或
pipenv --python /usr/bin/python3.11
执行后出现错误,完整报错信息如下:
Loading .env environment variables... Creating a virtualenv for this project... Pipfile: /home/dev/geotek-dev/Pipfile Using /usr/bin/python3.11 (3.11.1) to create virtualenv... ⠇ Creating virtual environment...created virtual environment CPython3.11.1.final.0-64 in 227ms creator CPython3Posix(dest=/root/.local/share/virtualenvs/geotek-dev-Rxuh4rdd, clear=False, global=False) seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1) activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator ✔ Successfully created virtual environment! Traceback (most recent call last): File "/usr/local/bin/pipenv", line 8, in <module> sys.exit(cli()) ^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 1128, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/cli/options.py", line 57, in main return super().main(*args, **kwargs, windows_expand_args=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 1053, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 1637, in invoke super().invoke(ctx) File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 1395, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 754, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/decorators.py", line 84, in new_func return ctx.invoke(f, obj, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/core.py", line 754, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/vendor/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/cli/command.py", line 210, in cli ensure_project( File "/usr/local/lib/python3.11/dist-packages/pipenv/core.py", line 541, in ensure_project ensure_virtualenv( File "/usr/local/lib/python3.11/dist-packages/pipenv/core.py", line 474, in ensure_virtualenv do_create_virtualenv( File "/usr/local/lib/python3.11/dist-packages/pipenv/core.py", line 1060, in do_create_virtualenv project._environment = Environment( ^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/environment.py", line 79, in __init__ self._base_paths = self.get_paths() ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/environment.py", line 383, in get_paths c = subprocess_run(command) ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/pipenv/utils/processes.py", line 75, in subprocess_run return subprocess.run( ^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/subprocess.py", line 548, in run with Popen(*popenargs, **kwargs) as process: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/subprocess.py", line 1024, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/usr/lib/python3.11/subprocess.py", line 1901, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: '/root/.local/share/virtualenvs/geotek-dev-Rxuh4rdd/bin/python'
排查后发现,Python 3.11创建的虚拟环境目录结构和旧版本(比如3.9)不同:
- Python 3.9的虚拟环境目录包含
bin、lib、pyvenv.cfg - Python 3.11的虚拟环境目录包含
lib、local、pyvenv.cfg,bin/python实际位于local目录下,而非虚拟环境根目录。
需要如何配置才能让Pipenv正常工作?
解决方案
1. 升级Pipenv到最新版本
你的Pipenv版本(2022.12.19)发布于Python 3.11正式版之后不久,存在对Python 3.11虚拟环境结构的兼容问题。升级到最新版本即可修复这个路径识别错误:
pip install --upgrade pipenv
升级完成后,重新执行创建虚拟环境的命令即可正常工作。
2. 手动指定虚拟环境的Python路径(临时 workaround)
如果暂时无法升级Pipenv,可以手动创建虚拟环境并指定正确的Python路径:
- 先手动用Python 3.11创建虚拟环境:
python3.11 -m venv /root/.local/share/virtualenvs/geotek-dev-Rxuh4rdd
- 让Pipenv关联这个已创建的虚拟环境,指定
local/bin下的Python路径:
pipenv --python /root/.local/share/virtualenvs/geotek-dev-Rxuh4rdd/local/bin/python
3. 使用virtualenv创建标准结构的虚拟环境
部分Linux发行版的Python 3.11可能修改了默认虚拟环境结构,你可以用virtualenv包创建标准结构的虚拟环境,再让Pipenv使用:
- 安装virtualenv:
pip install virtualenv
- 创建标准结构的虚拟环境:
virtualenv --python=python3.11 venv
- 让Pipenv使用这个虚拟环境:
pipenv --python ./venv/bin/python
内容的提问来源于stack exchange,提问作者Vadim Beglov
相关产品推荐
相关产品推荐

