Pipenv创建虚拟环境提示Python安装失败但实际可用的问题
问题背景
我通过pyenv编译安装了Python 3.7.17,执行的命令如下:
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.17 Downloading Python-3.7.17.tar.xz... -> https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tar.xz Installing Python-3.7.17... patching file Doc/library/ctypes.rst patching file Lib/test/test_unicode.py patching file Modules/_ctypes/_ctypes.c patching file Modules/_ctypes/callproc.c patching file Modules/_ctypes/ctypes.h patching file setup.py patching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst' patching file Modules/_decimal/libmpdec/mpdecimal.h patching file setup.py Installed Python-3.7.17 to /home/username/.pyenv/versions/3.7.17
随后尝试用该版本搭建Pipenv虚拟环境,执行pipenv install python 3.7.17时,虚拟环境创建成功,但后续提示找不到匹配的Python版本导致安装失败。然而进入Pipenv Shell后,Python 3.7.17可正常运行。想了解此问题原因,确认是否会影响后续wxPython编译。
问题原因
- 命令语法错误:
pipenv install python 3.7.17的用法有误,pipenv install是用于安装Python包的命令,你把python当成了包名,Pipenv会尝试去PyPI查找名为python、版本为3.7.17的包,自然找不到匹配项,因此触发安装失败提示。但虚拟环境本身已经基于指定的Python 3.7.17创建完成,所以进入shell后能正常运行该版本。正确指定Python版本创建虚拟环境的命令是pipenv --python 3.7.17或pipenv install --python 3.7.17。 - 环境变量传递偏差:Pipenv在执行包安装步骤时,可能未正确读取pyenv管理的Python版本路径,导致它在全局环境中无法定位到对应版本,但虚拟环境内部已经绑定了正确的Python解释器,所以shell内可正常使用。
对wxPython编译的影响
只要虚拟环境内的Python 3.7.17能正常运行,且在Pipenv环境内执行编译操作,基本不会有影响:
- 编译wxPython时,会优先使用当前虚拟环境内的Python解释器、头文件和共享库,你用
--enable-shared编译的Python已经提供了wxPython依赖的Python C API共享库,满足编译需求。 - 编译前确保激活Pipenv虚拟环境(通过
pipenv shell进入或用pipenv run前缀执行命令),让编译过程完全基于这个3.7.17版本的环境,即可避免版本不匹配问题。
内容的提问来源于stack exchange,提问作者Zak
相关产品推荐
相关产品推荐

