python虚拟环境安装

很久以前我刚接触Python的时候,因为要运行一个软件,然后那个软件需要依赖某个库,我当时其实已经有那个库了,但是因为比较新,所以那个软件无法使用。然后网上说有几种方法:

  • 换台新电脑
  • 使用虚拟机,但是很多环境都需要重新配置,不考虑
  • 使用docker,当时我用的是这个解决的,但是数据传来传去的不太方便,其他倒是还好。
  • 使用Python自带的虚拟环境
    • virtualenv——一个很好用的第三方包,直接pip install virtualenv即可。
    • venv——python3自带的一个脚本,但是在ubuntu/debian上需要用apt install python3-venv安装后才可以使用

今天好好运行了一下Python的这个虚拟环境,感觉还挺方便的,期间也遇到了一些错误和如何解决它,在此记录下。

Windows10 Python版本:3.7.3

使用Python3自带的venv创建虚拟环境,结果是:

1
2
E:\PythonTest>python3 -m venv venv
Error: [WinError 2] 系统找不到指定的文件。

但是如果我安装venv而选择不装pip,完全没有问题:

1
python3 -m venv --without-pip venv

这从侧面说明了,问题是出在了虚拟环境安装pip上面。最后翻阅了很多资料,说是因为python3.exe这个命名导致的,只需要把它改成python.exe就行了,我自己亲身试验了一下,还真的修好了233333,所以这是为什么呢。

经过在网上搜索,找到了一个比较满意的答案:

1567823118646

简单来说就是因为你把python.exe改名成了python3.exe,导致了pip的脚本不认识了,所以会有这个问题。还有一个更加优雅的解决方法,py -3 -m venv venv,用到的Python Launcher for Windows这个技术,实测下来没有问题而且非常优雅。

Ubuntu Python版本:3.7.4

1
2
python3 -m venv clp                          
Error: Command '['/root/python/clp/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

可以从错误中看出是因为执行ensurepip这个模块的时候返回的错误信息,那不如我们自己手动执行一下这条命令?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
python3 -Im ensurepip --upgrade --default-pip                                     1 ↵
Traceback (most recent call last):
File "/usr/local/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/local/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.7/ensurepip/__main__.py", line 5, in <module>
sys.exit(ensurepip._main())
File "/usr/local/lib/python3.7/ensurepip/__init__.py", line 204, in _main
default_pip=args.default_pip,
File "/usr/local/lib/python3.7/ensurepip/__init__.py", line 117, in _bootstrap
return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/usr/local/lib/python3.7/ensurepip/__init__.py", line 27, in _run_pip
import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available

从输出来看应该是缺少一个叫zlib的库,这个问题网上倒是有很详细的解释说明,解决起来还是比较烦人的。

但是在3.7.3,3.6.83.5.2这三个版本上面均没有问题。

virtualenv

这个我目前还没遇到问题,是Python的第三方库,用起来跟venv几乎一样(其实应该说venv跟它一样吧23333),所以如果不想解决venv的问题的话,推荐使用它。