此处将为大家介绍关于cygwin2.6_x86编译安装python3.5.2的详细内容,并且为您解答有关安装python编译器的相关问题,此外,我们还将为您介绍关于CentOS6编译安装python3
此处将为大家介绍关于cygwin2.6_x86编译安装python3.5.2的详细内容,并且为您解答有关安装python编译器的相关问题,此外,我们还将为您介绍关于CentOS 6编译安装python 3.6.1、CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)、CentOS-6.5源码编译安装Python2.7.9、Centos6.5_X86_64安装python2.7的有用信息。
本文目录一览:- cygwin2.6_x86编译安装python3.5.2(安装python编译器)
- CentOS 6编译安装python 3.6.1
- CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)
- CentOS-6.5源码编译安装Python2.7.9
- Centos6.5_X86_64安装python2.7
cygwin2.6_x86编译安装python3.5.2(安装python编译器)
一、环境:
- win7
- babun 1.2.0
- cygwin 2.6.0
二、下载
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
三、编译过程
1、预安装相关库
pact install make
pact install tcl tcltk tcl-tk tcl-tk-devel tcl-devel
pact install ncurses ncurses-devel libncurses-devel
pact install bzip2 libbz2-devel libreadline-devel readline libreadline7
pact install sqlite3 libsqlite3-devel libsqlite3_0 tcl-sqlite3
pact install gdbm libgdbm-devel
pact install liblzma-devel xz liblzma5 lzma
pact install crypt libcrypt-devel libcrypt0
pact install openssl openssl-devel
2、解压
tar zxvf Python-3.5.2.tgz
cd Python-3.5.2
3、修改问题文件
sed -i ''/PyLong_FromLong(si->si_band)/i\#ifdef __CYGWIN__\n PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(0L));\n#else'' ./Modules/signalmodule.c
sed -i ''/PyLong_FromLong(si->si_band)/a\#endif'' ./Modules/signalmodule.c
sed -i ''s/libpython$(VERSION).dll.a/libpython$(LDVERSION).dll.a/'' Makefile.pre.in
sed -i ''s/-lpython\\$(VERSION)/-lpython\\$(LDVERSION)/'' Modules/makesetup
sed -i ''s/PyVarObject_HEAD_INIT(&PyType_Type/PyVarObject_HEAD_INIT(NULL/'' Modules/_struct.c
sed -i ''/PyType_GenericAlloc(&unpackiter_type/i\ Py_TYPE(&unpackiter_type) = &PyType_Type;'' Modules/_struct.c
sed -i ''717,723s/^/#/'' Lib/distutils/command/build_ext.py
sed -i ''s/\".tbd\"/\".dll.a\"/'' ./Lib/distutils/unixccompiler.py
sed -i ''/include "Python.h"/a\#ifdef HAVE_CURSES_IS_PAD\n#define py_is_pad(win) is_pad(win)\n#else\n#if defined(WINDOW_HAS_FLAGS) \&\& !NCURSES_OPAQUE\n#define py_is_pad(win) ((win) ? ((win)->_flags \& _ISPAD) != 0 : FALSE)\n#else \n#define py_is_pad(win) FALSE\n#endif\n#endif'' Modules/_cursesmodule.c
sed -i ''s/self->win->_flags \& _ISPAD/py_is_pad(self->win)/'' Modules/_cursesmodule.c
sed -i ''/NCURSES_OPAQUE 0/a\#else\n#define NCURSES_OPAQUE 1'' Include/py_curses.h
4、编译:
./configure
make > make1112_2055.log 2>make1112_2055.err
make install
四、安装后:
如果系统中有多套python版本,请正确设置环境变量:PATH,PYTHONHOME,PYTHONPATH
然后重新启动cygwin或babun终端,一定要重新启动。
五、遇到的问题汇总:
1.错误:./Modules/signalmodule.c:965:60: error: ‘siginfo_t {aka struct }’ has no member named ‘si_band’
解决:
sed -i ''/PyLong_FromLong(si->si_band)/i\#ifdef __CYGWIN__\n PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(0L));\n#else'' ./Modules/signalmodule.c
sed -i ''/PyLong_FromLong(si->si_band)/a\#endif'' ./Modules/signalmodule.c
修改后文件如下:
#ifdef __CYGWIN__
PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(0L));
#else
PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(si->si_band));
#endif
2.错误:make: * No rule to make target ‘libpython3.5m.dll.a’, needed by ‘python.exe’.
解决:
sed -i ''s/libpython$(VERSION).dll.a/libpython$(LDVERSION).dll.a/'' Makefile.pre.in
3.错误:ld: cannot find -lpython3.5 collect2: error: ld returned 1 exit status
解决:
sed -i ''s/-lpython\\$(VERSION)/-lpython\\$(LDVERSION)/'' Modules/makesetup
4.错误:/Modules/_struct.c:1629:27: error: initializer element is not constant PyVarObject_HEAD_INIT(&PyType_Type, 0)
解决:
sed -i ''s/PyVarObject_HEAD_INIT(&PyType_Type/PyVarObject_HEAD_INIT(NULL/'' Modules/_struct.c
sed -i ''/PyType_GenericAlloc(&unpackiter_type/i\ Py_TYPE(&unpackiter_type) = &PyType_Type;'' Modules/_struct.c
5.错误:running build_ext ld: cannot find -lpython3.5 collect2: error: ld returned 1 exit status
解决:
sed -i ''717,723s/^/#/'' Lib/distutils/command/build_ext.py
6.错误:INFO: Can’t locate Tcl/Tk libs and/or headers
pact install tcl tcltk tcl-tk tcl-tk-devel tcl-devel
7.错误:
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_gdbm _lzma _sqlite3
_ssl _tkinter nis
ossaudiodev readline spwd
To find the necessary bits, look in setup.py in detect_modules() for the module’s name.
pact install ncurses ncurses-devel libncurses-devel
pact install bzip2 libbz2-devel libreadline-devel readline libreadline7
pact install sqlite3 libsqlite3-devel libsqlite3_0 tcl-sqlite3
pact install gdbm libgdbm-devel
pact install liblzma-devel xz liblzma5 lzma
但是,MinGW/Cygwin确提供了直接与.dll文件链接的作用,就是可以不需要imp-lib库文件,只要DLL文件存在,也可以链接成功。这样就导致.dll.a文件似乎不是那么有用了。在很多场合下,可以不需要.dll.a文件了。但是有几个例外情况,来自于RedHat的官方描述。
ld and WIN32 (cygwin/mingw)
sed -i ''s/\".tbd\"/\".dll.a\"/'' ./Lib/distutils/unixccompiler.py
8.错误:
_cryptmodule.c:39: undefined reference to `crypt’ collect2: error: ld returned 1 exit status
Failed to build these modules:_crypt
解决:
pact install crypt libcrypt-devel libcrypt0
pact install openssl openssl-devel
9.错误:
Modules/_cursesmodule.c:1073:18: error: dereferencing pointer to incomplete type ‘WINDOW {aka struct _win_st}’
if (self->win->_flags & _ISPAD)
sed -i ''/include "Python.h"/a\#ifdef HAVE_CURSES_IS_PAD\n#define py_is_pad(win) is_pad(win)\n#else\n#if defined(WINDOW_HAS_FLAGS) \&\& !NCURSES_OPAQUE\n#define py_is_pad(win) ((win) ? ((win)->_flags \& _ISPAD) != 0 : FALSE)\n#else \n#define py_is_pad(win) FALSE\n#endif\n#endif'' Modules/_cursesmodule.c
sed -i ''s/self->win->_flags \& _ISPAD/py_is_pad(self->win)/'' Modules/_cursesmodule.c
sed -i ''/NCURSES_OPAQUE 0/a\#else\n#define NCURSES_OPAQUE 1'' Include/py_curses.h
10.错误不再解决
The necessary bits to build these optional modules were not found:
_tkinter nis ossaudiodev
spwd
To find the necessary bits, look in setup.py in detect_modules() for the module’s name.
11.make test执行通不过可以不用处理,报如下错误:
PermissionError: [Errno 13] Permission denied
make: * [Makefile:1014: test] Error 1
12.正确设置环境变量:PATH,PYTHONHOME,PYTHONPATH
尤其是安装有window版本的python时,否则会冒出各种各样的问题,例如:
(1)Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named ‘encodings’
(2)ImportError: No module named ‘_sysconfigdata’
解决:
export PATH=` echo $PATH|sed ''s/\/cygdrive\/d\/app\/Python34\/Lib\/site-packages\/PyQt5://''|sed ''s/\/cygdrive\/d\/app\/Python34\/Scripts://''|sed ''s/\/cygdrive\/d\/app\/Python34://''` export PYTHONHOME=/usr/lib/python2.7 export PYTHONPATH=/usr/lib/python2.7/lib:/usr/lib/python2.7
六、遇到的告警问题汇总:
1.信息:关于pthread_key_t类型转换问题,在cygwin64中会变成错误
下面的修改不正确,仅作为修改记录.不需要按下面的处理
Python/thread_pthread.h:613:13: warning: comparison between pointer and integer
if (key > INT_MAX) {
处理:
sed -i ''s/PyThread_create_key(void)/PyThread_create_key(pthread_key_t *key)/'' Python/thread_pthread.h
sed -i ''/pthread_key_t key;/s/^/\/\//'' Python/thread_pthread.h
sed -i ''s/pthread_key_create(\&key/pthread_key_create(key/'' Python/thread_pthread.h
sed -i ''/ if (key > INT_MAX)/i\#if defined(__INSIDE_CYGWIN__) \&\& defined(__cplusplus)'' Python/thread_pthread.h
sed -i ''s/if (key > INT_MAX)/if (*key > INT_MAX)/'' Python/thread_pthread.h
sed -i ''s/pthread_key_delete(key);\n errno = ENOMEM;/pthread_key_delete(*key);\n errno = ENOMEM;/'' Python/thread_pthread.h
sed -i ''/return (int)key;/i\#endif'' Python/thread_pthread.h
sed -i ''s/return (int)key;/return 0;/'' Python/thread_pthread.h
sed -i ''s/PyThread_delete_key(int key)/PyThread_delete_key(pthread_key_t key)/'' Python/thread_pthread.h
sed -i ''s/PyThread_delete_key_value(int key)/PyThread_delete_key_value(pthread_key_t key)/'' Python/thread_pthread.h
sed -i ''s/PyThread_set_key_value(int key/PyThread_set_key_value(pthread_key_t key/'' Python/thread_pthread.h
sed -i ''s/PyThread_get_key_value(int key)/PyThread_get_key_value(pthread_key_t key)/'' Python/thread_pthread.h
sed -i ''s/PyThread_create_key(void);/PyThread_create_key(pthread_key_t *key);/'' Include/pythread.h
sed -i ''s/PyThread_delete_key(int);/PyThread_delete_key(pthread_key_t key);/'' Include/pythread.h
sed -i ''s/PyThread_set_key_value(int/PyThread_set_key_value(pthread_key_t/'' Include/pythread.h
sed -i ''s/PyThread_get_key_value(int)/PyThread_get_key_value(pthread_key_t)/'' Include/pythread.h
sed -i ''s/PyThread_delete_key_value(int key);/PyThread_delete_key_value(pthread_key_t key);/'' Include/pythread.h
sed -i ''s/static int autoTLSkey = 0;/static pthread_key_t autoTLSkey = 0;/'' Python/pystate.c
sed -i ''/autoTLSkey = PyThread_create_key/s/^/\/\//'' Python/pystate.c
sed -i ''s/autoTLSkey == -1/PyThread_create_key(\&autoTLSkey) == -1/'' Python/pystate.c
sed -i ''s/static int tracemalloc_reentrant_key;/static pthread_key_t tracemalloc_reentrant_key;/'' ./Modules/_tracemalloc.c
sed -i ''/tracemalloc_reentrant_key = PyThread_create_key/s/^/\/\//'' ./Modules/_tracemalloc.c
sed -i ''s/tracemalloc_reentrant_key == -1/PyThread_create_key(\&tracemalloc_reentrant_key) == -1/'' ./Modules/_tracemalloc.c
终于搞定了,带着疲惫,带着欢欣^_^
CentOS 6编译安装python 3.6.1
Python官网:https://www.python.org/
一、查看CentOS版本和系统默认Python版本:
# cat /etc/redhat-release
# python -V
二、编译安装Python-3.6.1:
1、安装依赖软件包:
# yum -y groupinstall "Development tools"
# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-develreadline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
2、设置CentOS6当前系统时间:
# date 040413022017.30
# date
3、编译安装Python-3.6.1:
#wgethttps://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
# tar xf Python-3.6.1.tar.xz -C /usr/src
# cd /usr/src/Python-3.6.1
# ./configure --prefix=/usr/local/python3.6.1 --enable-shared --enable-profiling--enable-optimizations --disable-ipv6 --with-threads --with-pymalloc --with-fpectl--enable-loadable-sqlite-extensions
# make && make install //此步骤过程中需要执行测试,用时较长
4、更改CentOS6默认Python版本为3.6.1:
# mv /usr/bin/python /usr/bin/python2.6.6-old
# ln -s /usr/local/python3.6.1/bin/python3 /usr/bin/python
5、添加至PATH环境变量:
# vim /etc/profile.d/python3.6.1.sh
exportPATH=/usr/local/python3.6.1/bin:$PATH
# . /etc/profile.d/python3.6.1.sh
# echo $PATH
6、配置头文件:
# ln -sv /usr/local/python3.6.1/include /usr/include/python3.6
7、配置库文件:
# echo "/usr/local/python3.6.1/lib" >/etc/ld.so.conf.d/python3.6.1.conf
# cat /etc/ld.so.conf.d/python3.6.1.conf
# ldconfig
8、配置man帮助文档:
# vim /etc/man.config,新增如下代码:
MANPATH /usr/local/python3.6.1/share/man
9、查看配置后的Python版本:
# python3 -V
三、将yum中的版本修改为系统原来的2.6.6升级Python后会导致yum无法使用:
# vim /usr/bin/yum,将第一行的“#!/usr/bin/python”修改为“#!/usr/bin/python2.6.6-old”
添加:安装pip方法
首先安装epel扩展源:
#yum -y install epel-release
然后再安装pip
#yum -y install python-pip
centos查找命令
find/-name"piP*"
1、安装python3.6.1
2、安装setuptools35.0.2
3、安装pip
#easy_install pip
本文出自 “天道酬勤” 博客,请务必保留此出处http://qiuyue.blog.51cto.com/1246073/1912806
CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)
CentOS 7系统自带了python2,不过可以不用2版本,直接使用python3运行python脚本就可以,但是千万别去动系统自带的python2,因为有程序依赖目前的python2环境,比如yum,动了yum就无法运行了,其他有的程序也可能会受影响。明白了上面的,然后就来安装python3.6:
安装步骤:
1. 安装依赖环境
# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
2.下载python3
https://www.python.org/downloads/
1
|
# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
|
3.安装python3
包安装在/usr/local/python3(具体安装位置看个人喜好)
创建目录:
1
|
# mkdir -p /usr/local/python3
|
解压下载好的Python-3.6.5.tgz包(具体包名因你下载的Python具体版本,我下载的是python3.6.5这里就以Python-3.6.5.tgz为例)
1
|
# tar -zxvf Python-3.6.5.tgz
|
4.进入解压后的目录,编译安装
如果编译安装过程有报错提示看我的另一个随笔写的解决办法http://www.cnblogs.com/shwee/p/9013851.html
1
2
|
# cd Python-3.6.5
# ./configure --prefix=/usr/local/python3
|
然后:make
1
|
# make
|
接着:make install
1
|
# make install
|
或者两步一起:make && make install
5.安装好了,建立python3的软链
1
|
# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
|
6.并将/usr/local/python3/bin加入PATH
1
2
3
4
5
6
7
8
9
|
# vim ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if
[
-
f ~
/
.bashrc ]; then
. ~
/
.bashrc
fi
# User specific environment and startup programs
PATH
=
$PATH:$HOME
/
bin
:
/
usr
/
local
/P
ython3
/
bin
export PATH
|
按ESC,输入:wq,按回车保存退出编辑。
修改完记得执行行下面的命令,让上一步的修改生效:
1
|
# source ~/.bash_profile
|
检查python3及pip3是否正常可用:
1
2
3
4
|
# python3 -V
Python
3.6
.5
# pip3 -V
pip
9.0
.3
from
/
usr
/
local
/P
ython3
/
lib
/
python3.
6
/
site
-
packages (python
3.6
)
|
出处:http://www.cnblogs.com/shwee/
CentOS-6.5源码编译安装Python2.7.9
笔者序
偶然间翻出一篇去年帮公司安装开发环境后记下的关于Python
安装的笔记,特来向大家分享。
犹记得当时Python
版本切换的问题困扰了我,以及整个项目组好久,因为按照正常的方法,安装Python
本身没有问题,且能基本使用,但使用的过程中出现了大量包引用以及其他问题,后来发现这一切和本地库的路径,以及系统编码和Python源码编码的冲突有关,本文会着重说明。
准备工作
Python2.7.9
源码包:Python-2.7.9.tgz。确保当前系统安装了
gcc
。确保当前系统可以安装
rpm
包。在更新
Python
版本前,安装好需要使用的库(所有要安装的库必须兼容新版本,即Python2.7.9
),如tkinter
,sqlite
等。
安装过程
-
在终端输入
python
进入Python
解释器界面,输入如下内容:import sys print sys.maxunicode
如果结果
<=65535
,跳过第3
步。[1]
解压缩
Python-2.7.9.tgz
文件,然后进入Python-2.7.9
源码目录下。打开
configure
文件,找到have_ucs4_tcl=no
(大概在13047
行),将其改为have_ucs4_tcl=yes
,保存并退出。[2]
在终端执行命令
./configure --prefix=/usr/local/
,然后执行make && make install
编译安装。在终端执行命令
ln -sf /usr/local/bin/python2.7 /usr/bin/python
,将系统默认Python
版本改为Python2.7.9
。在终端执行
python -V
查看当前版本。
笔者注:
[1]:如果sys.maxunicode <= 65535
,则当前系统下Python
环境编码为UCS2
,> 65535
则为UCS4
,新环境需要与其一致。
[2]:该行是决定当前Python
编译后编码的关键,改成yes
则为UCS4
。
环境完善
yum
升级Python
版本以后,会出现图-1
所示yum
无法使用的情况,这是因为yum
本身是Python
写的,而CentOS-6.5
下的yum
不支持Python2.7.9
,这时候我们需要编辑/usr/bin/yum
文件的第一行:#!/usr/bin/python
,将其改为#!/usr/bin/python2.6
即可。
其他库和模块
很多时候安装了新Python
环境后,会出现大量ImportError
的异常情况——尽管我们在升级环境前已经安装好了那些库。
这种时候我们的第一反应往往是重新安装这些库,但这样往往会比较麻烦(如果库非常多),并容易造成本地库资源重复和冗余,而且有部分库在重新安装了以后依然无法使用(譬如sqlite3
),此时我们只需让新Python
使用本地库即可(这也是在准备工作阶段说过的那些安装的库必须兼容Python2.7.9
环境的原因),具体操作如下:
1.在终端执行/usr/bin/python2.6
,进入系统原自带Python2.6
的解释器,执行如下命令:
import sys
print ‘\n’.join(sys.path)
来查看本地所有Python
库的路径,一般如下:
/usr/lib64/python26.zip
/usr/lib64/python2.6
/usr/lib64/python2.6/plat-linux2
/usr/lib64/python2.6/lib-tk
/usr/lib64/python2.6/lib-old
/usr/lib64/python2.6/lib-dynload
/usr/lib64/python2.6/site-packages
/usr/lib/python2.6/site-packages
退出解释器,执行python
命令进入当前Python
环境的解释器,并执行同样命令获取Python2.7
的库目录:
/usr/local/lib/python27.zip
/usr/local/lib/python2.7
/usr/local/lib/python2.7/plat-linux2
/usr/local/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/site-packages
2.让新Python
环境使用本地库有两种方法:
把本地库的路径添加到系统环境变量中,执行
vim ~/.bashrc
编辑环境变量文件,在文件末尾加上export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6/lib-dynload/:/Other paths:/…
,不同路径用冒号分割,再执行source ~/.bashrc
立即在当前终端生效,全局生效需要重启操作系统。把所需的库复制或移动到
Python2.7
的对应目录下,譬如sqlite3
会抛ImportError: No module named _sqlite3
异常,只需要将/usr/lib64/python2.6/lib-dynload/_sqlite3.so
文件放到/usr/local/lib/python2.7/lib-dynload/
目录下即可。
前面在安装过程中涉及到一个安装编码的问题,如果Python2.7
的编码与本机Python
编码不一致,Python2.7
将无法使用本地库,表面上
在上述2)
方法中可以解决sqlite3
的import
问题,但使用过程中会出现其他异常,这里一定要注意。
至此,Python
升级完成。
后记
因为当时项目条件的原因,才有了CentOS-6.5
下源码编译安装Python2.7
的奇怪需求,实际开发中,建议大家直接使用自带Python2.7
的Linux
版本,会省去许多麻烦。
当然了,有时候也确实会因为环境升级,项目迭代等原因需要更新Python
版本的,无论哪个版本,均可参考本文,原理大同小异。
Centos6.5_X86_64安装python2.7
1.下载python2.7源码包:https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
2.安装编译环境:yum groupinstall "Development Tools"
3.解压,编译安装
#tar zxvf Python-2.7.8.tgz
#cd Python-2.7.8
#最后编译安装:
#./configure
#make && make install
cp -rf /usr/local/bin/python2.7 /usr/bin/python
注意:
若使用yum时候报错,检查下/usr/bin/yum头一行的解释python是哪个版本,更改python2.6即可
今天关于cygwin2.6_x86编译安装python3.5.2和安装python编译器的分享就到这里,希望大家有所收获,若想了解更多关于CentOS 6编译安装python 3.6.1、CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)、CentOS-6.5源码编译安装Python2.7.9、Centos6.5_X86_64安装python2.7等相关知识,可以在本站进行查询。
本文标签: