GVKun编程网logo

cygwin2.6_x86编译安装python3.5.2(安装python编译器)

13

此处将为大家介绍关于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编译器)

cygwin2.6_x86编译安装python3.5.2(安装python编译器)

一、环境:

  1. win7
  2. babun 1.2.0
  3. 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

CentOS 6编译安装python 3.6.1

Python官网:https://www.python.org/

一、查看CentOS版本和系统默认Python版本:

# cat /etc/redhat-release

# python -V

wKiom1jjRYCzaxPHAABQLfg6wdA818.jpg

二、编译安装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 //此步骤过程中需要执行测试,用时较长

wKioL1jjRZvwAgwEAABvO_NBwYA501.jpg

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

wKiom1jjRa-Q_rdMAAA85B-C9X4301.jpg

三、将yum中的版本修改为系统原来的2.6.6升级Python后会导致yum无法使用:

wKioL1jjRdyzSQlYAABfo5KtF0U586.jpg

# vim /usr/bin/yum,将第一行的“#!/usr/bin/python”修改为“#!/usr/bin/python2.6.6-old

wKiom1jjRezxJb21AAH5oSAd23o555.jpg


添加:安装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安装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

CentOS-6.5源码编译安装Python2.7.9

笔者序

偶然间翻出一篇去年帮公司安装开发环境后记下的关于Python安装的笔记,特来向大家分享。

犹记得当时Python版本切换的问题困扰了我,以及整个项目组好久,因为按照正常的方法,安装Python本身没有问题,且能基本使用,但使用的过程中出现了大量包引用以及其他问题,后来发现这一切和本地库的路径,以及系统编码和Python源码编码的冲突有关,本文会着重说明。

准备工作

  • Python2.7.9源码包:Python-2.7.9.tgz。

  • 确保当前系统安装了gcc

  • 确保当前系统可以安装rpm包。

  • 在更新Python版本前,安装好需要使用的库(所有要安装的库必须兼容新版本,即Python2.7.9),如tkintersqlite等。

安装过程

  1. 在终端输入python进入Python解释器界面,输入如下内容:

    import sys
    print sys.maxunicode

    如果结果<=65535,跳过第3步。[1]

  2. 解压缩Python-2.7.9.tgz文件,然后进入Python-2.7.9源码目录下。

  3. 打开configure文件,找到have_ucs4_tcl=no(大概在13047行),将其改为have_ucs4_tcl=yes,保存并退出。[2]

  4. 在终端执行命令./configure --prefix=/usr/local/,然后执行make && make install编译安装。

  5. 在终端执行命令ln -sf /usr/local/bin/python2.7 /usr/bin/python,将系统默认Python版本改为Python2.7.9

  6. 在终端执行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即可。

图-1 yum无法使用

其他库和模块

很多时候安装了新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环境使用本地库有两种方法:

  1. 把本地库的路径添加到系统环境变量中,执行vim ~/.bashrc编辑环境变量文件,在文件末尾加上export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6/lib-dynload/:/Other paths:/…,不同路径用冒号分割,再执行source ~/.bashrc立即在当前终端生效,全局生效需要重启操作系统。

  2. 把所需的库复制或移动到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)方法中可以解决sqlite3import问题,但使用过程中会出现其他异常这里一定要注意

至此,Python升级完成。

后记

因为当时项目条件的原因,才有了CentOS-6.5下源码编译安装Python2.7的奇怪需求,实际开发中,建议大家直接使用自带Python2.7Linux版本,会省去许多麻烦。

当然了,有时候也确实会因为环境升级,项目迭代等原因需要更新Python版本的,无论哪个版本,均可参考本文,原理大同小异。

Centos6.5_X86_64安装python2.7

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等相关知识,可以在本站进行查询。

本文标签: