引言:
在使用Python3.6的时候遇到了很多坑,而且很多都是编译安装时留下的坑,而这些坑需要重新编译安装python才能够解决,令人头疼。这里做一些总结,方便自己的同时也希望对他人有所帮助。
依赖库:
- 编译安装过程需要的库。
sudo apt-get install gcc make zlib1g-dev
- bz2支持库
sudo apt-get install libbz2-dev
bz2支持库,若在编译安装python前没有安装,将无法通过 pip install 安装提供bz2格式的第三方库,会出现unsupported archive format: .tar.bz2的错误,例如爬虫库Scrapy依赖的Twisted。
- sqlite3支持库
sudo apt-get install libsqlite3-dev
sqlite3支持库,若在编译安装python前没有安装,则python中会缺失sqlite3模块,当引入sqlite3或使用依赖sqllite3的第三方库(例如Scrapy)时,会出现ImportError: No modul named _sqllite3的错误。
- 其他:安装第三方库需要的库
sudo apt-get install python3-dev libxml2-dev libffi-dev libssl-dev libxslt1-dev
安装:
- 通过wget获取压缩包,这里选择3.6.1版
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
- 解压获取到的压缩包
tar xJf Python-3.6.1.tar.xz
- 进入解压生成的目录
cd Python-3.6.1
- 配置
./configure
- 编译
make
- 安装
sudo -H make install
TODO: 这里可以使用 sudo checkinstall 代替 sudo make install
编译安装可能遇到的深坑:
- make install 无法安装: 提示 permission denied
权限不足,使用 sudo make install - 编译安装通过,但是在创建虚拟环境时出错:
Error: Command '['path_to_venv/python3.6', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
编译安装前没有某些库,导致pip和setuptools没有在编译安装时随Python一起安装
为了搞定这个问题,也是一把辛酸泪
- 尝试手动安装pip,
- 先根据官网pypi的pip安装说明,get-pip.py方式安装,出现decompress error,提示缺少zlib包,又去安装zlib包,依然出错,google上说需要安装zlib后重新编译。。。(我的本意就是不想重新编译啊~~魂淡),又回到了原点。
- 依然不放弃,试着从pypi下载pip的zip压缩包,解压后,
/usr/local/bin/python3.6 setup.py install
, 出错。。。提示需要setuptools依赖,又去pypi下载setuptools的zip压缩包,解压,安装,提示ImportError需要另一个依赖(具体哪个依赖,好像当时头有点蒙,没太记住),感觉自己越陷越深!- 灵机一动,从系统自带的Python3.5的site-package里复制pip和setuptools,再次创建虚拟环境,出现同样错误
于是默默打开了duckduckgo.com:
how to build python3.6 from source in Ubuntu16.04