一、主要思路
Python安装包分文压缩包和.exe两种,其中压缩包的安装是先进行解压,在通过运行setup.py对模块进行安装。而exe可执行文件安装模块只要直接运行。而压缩包又包括.tar.gz、.zip等文件格式。所以我们首先要对这些压缩文件进行解压,然后遍历文件夹找到setup.py进行安装。
二、具体方法
exe可执行文件安装:os.system()调用系统命令直接安装
压缩文件安装:首先要对这些压缩文件进行解压,然后遍历解压后的文件夹找到setup.py,通过os.system()调用cmd命令(Python setup.py install)对模块进行安装。
其他方法:
首先安装好pip,直接通过os.system()调用pip install 模块名 进行安装
三、测试模块
ez_setup-0.9.tar.gz
pip-1.5.6.tar.gz
setuptools-1.1.7.tar.gz
setuptools-5.4.1-py2.py3-none-any.zip
lxml-3.2.0.win-amd64-py2.7.exe
Twisted-13.1.0.win-amd64-py2.7.exe
zope.interface-4.0.5.win-amd64-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
四、代码实现
# -*-coding: utf-8 -*-
importos,zipfile,tarfile,rarfile
#解压压缩包
defUnzip(target_dir):
os.chdir(target_dir) #将当期目录设为target_dir的目录
file_list =os.listdir(target_dir) #获得文件链表
for file_name in file_list:
ifos.path.splitext(file_name)[1] =='.gz': #解压tar.gz
tar = tarfile.open(file_name)
tar.extractall(os.path.join(target_dir,os.path.splitext(os.path.splitext(file_name)[0])[0]))
tar.close()
elif os.path.splitext(file_name)[1]=='.zip': #解压zip
zip_file = zipfile.ZipFile(file_name)
zip_file.extractall(os.path.join(target_dir,os.path.splitext(os.path.splitext(file_name)[0])[0]))
zip_file.close()
elif os.path.splitext(file_name)[1] =='.rar': #解压rar,运行前需安装模块tarfile
rar_file = rarfile.RarFile(file_name)
rar_file.extractall(os.path.join(target_dir,os.path.splitext(os.path.splitext(file_name)[0])[0]))
rar_file.close()
else:continue
#安装模块
defSetup_zip(unzip_file):
forparent,dirnames,filenames in os.walk(unzip_file):#三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames:
if filename=='setup.py':
a=os.path.join(parent,filename) #setup.py路径
b ='python '+a+' install'
os.system(b)
os.system('pause')
if os.path.splitext(filename)[1] =='.exe':
a=os.path.join(parent,filename) #exe可执行文件路径
os.system(a)
defmain():
unzip_dir=raw_input("""Pleasepress Enter to start setup""")
#print 'unzip_dir = ' + unzip_dir
if unzip_dir=='':
Unzip(os.getcwd())
Setup_zip(os.getcwd())
else:
Unzip(unzip_dir)
Setup_zip(unzip_dir)
if__name__=='__main__':
main()
五、结果
测试的压缩包全部正常安装,exe可执行文件的MySQL和Twisted模块没有正确安装。
MySQL和Twisted模块为exe文件,已经按步骤正确安装,这里出错可能是还需要一些依赖的库。
六、存在问题
1. 脚本必须放在安装模块文件夹中,每次调用os.system都会默认工作目录为当前目录。
2. Os.system只是调用系统命令,当没有安装setuptools的时候,模块能否正确安装还没测试。安装exe文件时还是需要一步步点击来安装模块,暂时没有找到方法对exe文件的模块直接安装