使用python 创建虚拟环境
创建虚拟环境出错一例 returned non-zero exit status 1
$ python3 -m venv vvv
报错内容如下
Error: Command ‘[’/home/*****/learning_log_env/bin/python’, ‘-Im’, ‘ensurepip’, ‘–upgrade’, ‘–default-pip’]’ returned non-zero exit status 1
使用命令行:
$ python3 -m venv --without-pip --system-site-packages vvv
建立项目就ok了。添加的这行命令的意思是允许虚拟环境使用系统安装的python包。
创建没有pip的虚拟环境,然后启动虚拟环境安装pip即可。但是经过实测,不安装pip也可使用pip命令。
参考文档
https://blog.csdn.net/ldq_sd/article/details/104004464
重点来了, 经过测试, 上面的方法创建的环境, 是有问题的.
执行 pip 安装会出现安装的包不在虚拟目录下. 也就是说安装到了全局环境.
那么怎么办呢? 经过仔细分析, 猜测应该是在执行 命令的时候出错了. 那么把命令复制出来, 执行以下看看返回结果不就更清楚了么…
执行后的反馈结果如下.
额!!! 竟然是在虚拟环境下运行的这个命令.
$ python3 -m venv vvv
估计退出环境就可以正常使用了吧.
再次执行仍然报错
firefly@firefly:~/Desktop/AI_py3.7_rk1.6.1$ /home/firefly/Desktop/AI_py3.7_rk1.6.1/vvv/bin/python3 -Im ensurepip --upgrade --default-pip
/home/firefly/Desktop/AI_py3.7_rk1.6.1/vvv/bin/python3: No module named ensurepip
这次报的错误不一样了, 是 No module named ensurepip
百度了一下应该是pip的问题, 所以利用python自带的命令 执行一下升级
$ python3.7 -m pip install -U --force-reinstall pip
结果没用, 试试下面这个. 这个是用脚本安装的, 注意
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3.7 get-pip.py # 运行安装脚本, 这里的python最好带上版本
还是不行.
sudo python -m easy_install --upgrade pip
sudo python -m easy_install --upgrade pyOpenSSL
提示安装pip都是成功的, 可是运行的时候却提示 No module named ensurepip
折腾了一大圈, 最后决定回过头来自信思考一下这是为啥.
我感觉应该是环境问题. 在执行安装pip的时候有一段警告, 大意是用root用户执行安装pip,会导致系统不太稳定. 建议在虚拟环境下使用pip… 所以根据这句话, 我猜测, pip应该是在虚拟环境下再安装才是正确的. 于是我删掉了之前的那些虚拟环境数据. 重新开始创建新的虚拟环境
最终正确的整个过程如下
为了方便显示和观看我特意将输出注释掉了.
//创建无pip的虚拟环境,进去再装pip.
root:~/Desktop/ai2$ python3.7 -m venv --without-pip vvv
//激活虚拟环境
root:~/Desktop/ai2$ source vvv/bin/activate
//看看python指向哪里,有没有指错
(vvv) root:~/Desktop/ai2$ which python
# /home/firefly/Desktop/ai2/vvv/bin/python
(vvv) root:~/Desktop/ai2$ python -V
# Python 3.7.10
//开始安装pip
(vvv) root:~/Desktop/ai2$ wget https://bootstrap.pypa.io/get-pip.py
(vvv) root:~/Desktop/ai2$ python get-pip.py
# Collecting pip
# Using cached pip-21.1.3-py3-none-any.whl (1.5 MB)
# Collecting setuptools
# Using cached setuptools-57.0.0-py3-none-any.whl (821 kB)
# Collecting wheel
# Using cached wheel-0.36.2-py2.py3-none-any.whl (35 kB)
# Installing collected packages: wheel, setuptools, pip
# Successfully installed pip-21.1.3 setuptools-57.0.0 wheel-0.36.2
// 看看指向虚拟目录下的pip才是正确的.
(vvv) root:~/Desktop/ai2$ which pip
# /home/firefly/Desktop/ai2/vvv/bin/pip
(vvv) root:~/Desktop/ai2$ pip -V
# pip 21.1.3 from /home/firefly/Desktop/ai2/vvv/lib/python3.7/site-packages/pip (python 3.7)
(vvv) root:~/Desktop/ai2$ pip install Cython
# Collecting Cython
# Using cached Cython-0.29.23-py2.py3-none-any.whl (978 kB)
# Installing collected packages: Cython
# Successfully installed Cython-0.29.23
//查看一下是否只有少量几个包和Cython, 如下则说明安装正确并且pip的安装也是正常的.
(vvv) root:~/Desktop/ai2/vvv/lib$ pip list
# Package Version
# ---------- -------
# Cython 0.29.23
# pip 21.1.3
# setuptools 57.0.0
总结一下 这个原因是因为 我的系统下有好几个版本的python 也有好几个版本的pip.
版本之间混乱了. 所以为了能够不混乱 建议使用 下面的命令 创建 一个无pip的虚拟环境,
$ python3.7 -m venv --without-pip vvv
然后再虚拟环境里安装pip.即可