参考:os遍历文件夹方式
部分报错问题会在文中详解
需要代码的直接翻到最后
今天的内容与之前的网络通信有所不同,今天讲的是小工具的制作
简介
相信大家都有拿到过别人的代码,或者换新电脑
那想要确保pip安装所有的库就非常麻烦
例如:
啊啊啊,每次看到报错都是那么的难受~~
那么,为了避免这种问题,就有各种解决办法,比如:
旧电脑的所有库全部打包运到新电脑
这种方法虽然能够保证所有库你都有,但是会出现一个问题,那就是空间占用大,很多你不常用的内容也会被迫安装,而且还有可能失败导致需要重装python
生成一个文件快速安装所有库
这是大部分的人选择的方法,但是这种方法有个问题那就是依旧有大部分你用不到的库在占用你的电脑
啊哦~ 你的本地磁盘用完了捏~
那么,该怎么办呢?
最好的办法就是根据项目定制一个pip文件:
正文
bug处理在最后
读取py文件
那么相信大家都知道,读取文件最常用的方法就是
with open('requirements.txt', 'r') as file:
content = file.read()
那么读取python文件是不是也是一样的呢?
很显然,python文件就是另类的txt文件
所以,就可以这样读取:
with open('main.py', 'r') as file:
content = file.read()
但是,这样子即长,又不方便使用,所以简化后就是:
content = open(i, encoding='utf-8').read()
初始化
import os
pathname = 'main服务器'
MainPath = '.\\' + pathname
paths = os.walk(MainPath)
pylist = []
pyPathList = []
theContent = []
result_list = set()
导入库,添加路径,创建list
这些讲了不能再讲的我就不详细解释了
重点
paths = os.walk(MainPath)
这是常见的os遍历文件夹操作,可以方便的读取所有的文件
另外一个是集合
result_list = set()
这是创建一个集合,防止重复安装一个库,集合相当于是list和dictionary的结合,并且不能有重复内容
获取所有py文件地址
话不多说,放上获取代码:
for path, dir_lst, file_lst in paths:
for file_name in file_lst:
pathTo = os.path.join(path, file_name)
if file_name.endswith('.py'):
pylist.append(file_name.split(".py")[0])
pyPathList.append(pathTo)
获取py文件创建了两个list
pylist
一个是pylist,这是放所有py文件名字的(防止导入错误的库)
因为有的文件很大,py文件可能会互相引用,所以要杜绝import的是自己的文件的情况,所以需要提前创建一个pylist
pyPathList
这是一个存放所有py文件路径的list,方便后面for in读取
读取py文件并提取import
for i in pyPathList:
content = open(i, encoding='utf-8').read()
lines = content.split('\n') # 将文本内容按行分割成列
result_list.update([line for line in lines if line.startswith("import")])
result_list.update([line for line in lines if line.startswith("from")])
for importThing in result_list:
i = importThing.split(" ")[1]
if i not in pylist:
theContent.append(i)
首先分割文本,把文本分割为一列列的格式
然后把前面是import的和from的提取出来
用空格分隔,获取第二个内容(库名称)
加入thecontent的list中间
相当简单的基础操作了,就不多说了,有问题的加微信群问我
保存文件
with open(os.path.join(MainPath, 'requirements.txt'), 'w') as file:
for library in theContent:
file.write(library + '\n')
也是非常基础的保存操作~~~
接下来就是打包exe
打包
cmd输入:
pip install pyinstaller
pyinstaller -F xxx.py
基础的打包操作
请注意,需要打包的时候把读取前的文件名改为
input("请输入文件名:")
github地址
bug
<built-in method read of _io.TextIOWrapper object at 0x0000019A591C45F0>
with open('requirements.txt', 'r') as file:
content = file.read()
出错:<built-in method read of _io.TextIOWrapper object at 0x0000019A591C45F0>
这是因为file.read没有加()
又或者有某些未知问题,可以把代码改为:
content = open(i, encoding='utf-8').read()
想要一起开发游戏或者交流bug的加入微信群: