基于CentOS系统Python2.7环境搭建和程序开发

前言

下述内容均由作者在centos6.9系统上实测,根据实际项目需求开发和完善,最终保证了程序正常运行。

python版本升级

在linux系统下操作时,需要将之前windows下的文件导入,当不能直接拉进去时,可以通过共享文件夹实现。

建立共享文件夹

  • 进入虚拟机->设置->选项->共享文件夹,选择总是启用,并添加主机路径和设置共享文件夹。

  • 登录系统后,打开Computer->mnt->hgfs文件夹,就可以看到之前添加的共享文件夹;

  • 主机和虚拟机之间需要传递文件时,放入共享文件夹即可。

安装zlib

由于Centos系统不带zlib,而且安装python模块时,需要zlib,而且需要先安装zlib然后安装编译python(如果python已经装好则需要重新编译python),zlib才能正常工作。输入命令(下载并安装):

yum install zlib
yum install zlib-devel

升级过程

网站上下载最新的Python2版本,Gzipped source tarball是对应Linux系统安装的,下载后主机通过共享文件夹传递给虚拟机。在虚拟机中,打开Terminal,然后进行如下操作:

python --version
out:python 2.6.6 #确定当前系统版本
​
tar –zxvf Python-2.7.14.tgz # 将下载的最新版本解压
cd Python-2.7.14
mkdir /usr/local/lib/python2.7
./configure --prefix=/usr/local/lib/python2.7 #解压后的目录下编译安装
make
make install
​
# 建立软连接,使系统默认的python指向python2.7
mv /usr/bin/python /usr/bin/python2.6
ln -s /usr/local/lib/python2.7 /usr/bin/python
​
python --version #查看python版本是否已经正常更新

修改yum

由于yum使用了原来python2.6的一些脚本,需要将yum重新导向原来的python2.6解释器才能使用。


which yum #找到yum位置
out:/usr/bin/yum
vim /usr/bin/yum #进入编辑模式,将python修改为python2.6,完成编辑后按Esc退出编辑模式,并输入#:wq保存并退出。

安装必要模块

setuptools

解压后进入文件夹,输入命令:


python setup.py build
python setup.py install

Tkinter

  • 安装Tkinter模块,安装好后系统自带的python可以使用,说明Tkinter安装成功,但是升级的python2.7不能使用,需要继续配置。

    
    yum -y install tkinter
    ​
    python
    ​
    import Tkinter
  • 进入Python安装文件夹,编辑Setup.dist文件,找到下述五行,去掉前面的#

    
    _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \
    -L/usr/local/lib \
    -I/usr/local/include \
    -ltk8.5 -ltcl8.5 \
    -lXll
  • ltk和ltcl默认是8.2,需要根据系统实际tcl/tk版本修改,可以通过下述命令查看实际版本。


rpm -qa | grep ^tk
out:tk -8.5.7-5.el6.x86_64
out:tkinter-2.6.6-36.el6.x86_64
​
rpm -qa | grep ^tcl
out:tk -8.5.7-6.el6.x86_64
​
yum -y install tcl-devel tk-devel #安装tck-devel和tk-devel
#配置安装
ldconfig
./configure
make
make install

pip

打开网页下载最新版的pip-10.0.1.tar.gz,然后执行下述代码:


tar zxvf pip-10.0.1.tar.gz
cd pip-10.0.1
python setup.py install
​
# pip install xxx,执行该命令时,出现错误:
# pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
rpm -aq|grep openssl # 查看openssl安装包,发现缺少openssl-devel包
yum install openssl-devel -y #yum安装openssl-devel
rpm -aq|grep openssl #查看安装结果
vi Python-2.7.14/Modules/Setup #修改Setup文件,即修改安装文件,可以直接路径下打开修改
# 修改为如下结果(其中起始没有#的行,是因为以删除)
# Socket module helper for socket(2)
_socket socketmodule.c timemodule.c
​
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto
    
#修改完保存,重新编译python,测试可正常使用
make
make install
​

pyinstaller


pip install pyinstaller #安装
​
pyinstaller -F -c xxx.py #出现如下所示错误
#OSError: Python library not found: libpython3.4mu.so.1.0, libpython3.4m.so.1.0, libpython3.4.so.1.0
#由于在系统的lib路径中找不到这个共享库。
#重新编译python,测试可正常使用(如果编译时加上了--enable-shared,才会编译这个共享库,默认的位置是python可执行程序所在目录的lib目录下,如/usr/local/python27)
./configure --enable-shared --prefix=/usr/local/lib/python2.7 #后面路径由于之前已经配置过,可以不加make
make install
#安装后将/usr/local/python/lib目录下的libpython2.7.so和libpython2.7.so.1.0复制到/usr/lib64中。
python --version #查看python是否正常。
pyinstaller -F -c xxx.py #打包成功得到xxx可执行文件

通过制定不同的参数来实现不同的打包方式,其可配置参数包括:

  • -F , -onefile:    指明该选项,将会生成一个总的exe文件,所有的文件都会被添加到这一个中。

  • -D, -onedir:  产生一个目录来盛装用于分发的exe文件,也比较方便。

  • -K, -tk:  在部署的时候,包含TCL/TK,这对于有图形界面的python文件比较的适用。

  • -a, -ascii: 不包含编码,因为在支持Unicode的Python版本上默认包含所有的编码,这个选项基本上不怎么用得到。

  • -d, -debug:  产生Debug版本的可执行文件。

  • -s, -strip:  这个参考别人的话为“可执行文件和共享库将run through strip,注意Cygwin的strip往往使得普通的win32DLL无法使用”。

  • -X, -upx:  压缩方式,如果有UPX安装,则会压缩源文件来执行。

  • -o DIR, -out=DIR:  指定DIR作为exe的生成目录,如果未指定,默认为pyinstaller的解压目录,且会根据python文件创建出同名的目录来保存生成的exe文件。

  • -p, DIR, -path=DIR:  设置导入的环境变量路径,windows下英文的分号分隔,也可以使用多个-p选项来设置导入多个路径。

  • -icon=<FILE.ICO>: 将file.ico添加为exe文件的图标。

  • -icon = <FILE.EXE, N>: 原理同上。

其他

xlrd、paho.mqtt、six等模块,下载其安装包tar.gz,通过tar –zxvf命令对安装包解压,然后进去文件夹,输入python setup.py install安装即可。

常用命令

yum

yum(Yellow dogUpdater,Modified)是一个Shell前端软件包管理器,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载安装。提供了查找、安装、删除某一个、一组甚至全部软件包的命令。

yum语法:yum [options][command][package…]

options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为yes),-q(不显示安装的过程),等等。

command:要进行的操作,update(更新),install(安装),remove(删除),等等。

package:要操作的对象。

其他


cd ~/Desktop #返回桌面目录
cd .. #返回上一级目录
tar –zxvf xxx.tar.gz #解压
mkdir /xxx/xxx #创建文件夹
which python #查看路径
./xxx # ./表示当前路径,xxx表示linux下可执行文件名
tar zxvf xxx.tar.gz #解压tar.gzwen
tar xvJf xxx.tar.xz

c/c++动态链接库

Windows下调用的是生成的.dll文件,而Linux下调用的是生成的.so文件。通过编译c代码,最后生成python可执行的.so文件,具体步骤如下(也可以写入makefile文件中,通过make命令来编译):

  • gcc –c test.c,将生成test.o文件(不必要)

  • gcc -fPIC -shared test.c –o test.so,将生成test.so文件

其中,-shared:表示指定生成动态链接库,不用该标志外部程序无法连接,相当于生成了一个可执行文件;

-fPIC:编译为位置独立的代码,不用此选项的话,编译后的代码位置是相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需求,而不能达到真正代码共享的目的。

对于C++代码,需要用g++来编译,同时函数之前需要添加extern “C”来声明。

程序问题解决

打包MainBegin.py生成可执行文件MainBegin后,运行出现如下错误:

ImportError: No module named pkgutil

​ 将site-packages/protobuf-2.5.1-py2.7.egg/google和site-packages/protobuf-2.5.1-py2.7.egg/google/protobuf路径下的__init__.py内容注释掉。

 

其他相关软件

LibreOffice

参考网页


yum install libreoffice
yum install libreoffice-headless

 

 

发布了10 篇原创文章 · 获赞 0 · 访问量 6267

猜你喜欢

转载自blog.csdn.net/u010379248/article/details/80114660