python环境打包
文章目录
环境打包的一些知识
一个程序B要安装,那么它可能需要A1,A2,A3等其他程序,也就是说,B的安装,依赖其他程序。
B可以是一个程序,也可以是一个项目,这里的A其实也就是依赖包或者依赖软件。将所有的A打包,也就是项目B运行所需要的环境。
|A1---|
|A2---|--->B
|A3---|
现在,新建一个文件夹File,那么这个文件夹中包含了A1,A2,A3,B。那么此时,环境A们,项目B都在一个文件夹中,B可以运行:
A1
A2
A3
B
运行B时,B需要知道其他依赖的位置,那么B用的就是相对路径。举个例子,运行B需要用到python,把么B的运行脚本中,就需要声明A1的位置,.\A1\python.exe
。
如果此时将这个文件夹打包,那么就可以实现项目迁移,不需要在其他电脑上重新配环境。因为他们都在一整个文件夹下,B用的又都是相对路径,那么B肯定能找到其他依赖包的位置。
那么问题来了,如果又有一个项目C,它用的环境是A1,A4,A5。怎么办呢?
|A1---|
|A4---|--->C
|A5---|
当然,我们也可以新建一个文件夹,文件夹中包含了A1,A4,A5,C。也就是包含了环境和项目。C用的也是相对路径。
A1
A4
A5
C
此时是不是可以将A1单独拿出来呢?
当然可以。如果A1安装在了其他文件夹中,那么C就需要重新声明A1的位置。这个位置,也就是绝对路径,也就是环境变量。让C能用,B也能用。也就是说,环境变量的作用是告诉全部的项目和程序,A1的位置。
注意,无论是B还是C,一般都会有一个文件用来存储依赖包的位置,单独打包的环境,用的相对路径,而在其他地方的依赖包,用相对路径的写法会比较复杂,所以用的是绝对路径。如果声明了环境变量,也就是声明了该依赖包的绝对路径。
也就是说,一个项目一个环境,便于迁移,用相对路径。
但是,如果很多项目用的都是同一个依赖包,避免冗余,就可以用绝对路径。
环境打包的一些命令(先不看,最后看)
# torch打包
.\runtime\python.exe -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# 指定打包目录
.\runtime\python.exe -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 -t .\runtime\Lib\site-packages
# 自己指定一个位置
.\runtime\python.exe -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 -t .\runtime\Lib\mysite-packages
# 卸载包
.\runtime\python.exe -m pip uninstall torch
# 导出依赖包列表
.\runtime\python.exe -m pip freeze > requirement_ok.txt
实践
目标:打包好了之后,双击就能用。
- pyinstaller打保证exe后,会确实一些包
- 使用虚拟环境,例如anoconda。如果换了路径,E盘到F盘,一样不能使用。因为conda的打包是绝对路径
制作python整合包,兼容路径和依赖包。
支出管理系统的打包
github项目名称:mijiao_consumption_management
一、项目下载和python环境安装
总体思路:1 在项目根目录下新建文件夹并安装python;2 打开cmd窗口使用相对路径下载项目运行依赖。
1 解压项目
2 cmd调出命令行窗口,目的是为了在该目录下进行其他安装包的操作
3 一般而言,项目中会有requirement文件,里面的描述内容含有所需要的依赖。并且需要结合项目地址看依赖包的版本和其他依赖。
4 去python官网下载python包,点击downloads-windows-选择stable releases-windows(64-bits)
;
(Windows embeddable package (64-bit)是嵌入包的方式)
5 然后在项目文件夹下新建一个文件夹取名为python
;
(一定要新建一个文件夹,因为安装的python中是一堆散文件,它不会帮你建一个python的文件夹。只有这样,项目目录下的文件就不会显得很乱。)
(其实也可以将python安装在其他目录,然后复制到项目地址下。如果你有多个python版本在一个文件夹下,以应对不同的项目环境,这样就可以直接复制到其他项目中。例如:)
6 将python安装到Mijiao_Consumption_Management-main\python
中,并且不需要勾选Add python.exe to PATH
。
(Customize installation,安装位置,PATH,这三个需要动一下,其他的不要动。)
(如果你显示为这个:第一个是修改,安装步骤和第一次安装相同,路径不可选;第二个是将你误删的文件补充进第一次安装的路径;第三个是卸载已有路径下的python。我选择repair,然后uninstall,再安装。)
7 安装完之后显示为:
8 将python文件夹更名为runtime
(不更名也可以)
二、pip下载依赖包
(只有一个步骤)在弹出的cmd窗口中出入:.\runtime\phthon.exe -m pip install -r requirement.txt
,然后点击安装。
- 相对路径
.\runtime\python.exe
,这里调取的是该文件夹下的python执行文件; - 使用-m,使用该环境下的命令。使用
-m
可以确保运行的是当前 Python 环境中的模块,避免因系统环境变量混乱导致的版本冲突。 pip install -r requirement.txt
表示下载txt中的依赖包,pip是一个包管理器,作用是将环境打包。- 使用
.\runtime\phthon.exe -m
的作用是将依赖打包进runtime文件夹,此时runtime中使用的就是相对路径。在使用runtime作为依赖文件时就是一个相对路径的形式。
(如果打包很慢,那就科学上网。部分人需要在上述命令最后加入--proxy http://localhost:10807
)
(打开命令行窗口,Win10需要在路径下输入cmd,Win11可以右键点击在终端打开
)
(注意反斜线和正斜线,不然会报错'.' 不是内部或外部命令......
)
(如果报错No module named pip
,那就根据第一部分的6步骤重装)
2 安装完之后进行下一步。
三、启动脚本编辑
先看完整个过程,再进行尝试。
思路:编写执行脚本,并根据github中的启动说明编辑脚本,然后启动并验证。
1 启动项为app.py。新建文件start.txt,并且编辑内容:
2 查看项目说明。项目说明中是用streamlit run app.py进行启动的,使用的是python环境安装包中的一个命令。
3 所以需要重新编辑内容,.\runtime\python.exe -m streamlit run app.py
(-m的作用是使用该python环境下的命令,一般情况下都需要加上。)
4 将文件更名为bat文件。
5 点击start.bat启动,随便操作一下。
(第一次启动streamlit会让你填邮箱,随便填然后就能启动了。)
(powershell和cmd对正反斜杠的识别不一样,注意修改。)
6 将cmd窗口关了,项目也就关了。
四、验证。
关闭cmd窗口,重新启动进行验证;
将根目录Mijiao_Consumption_Management-main
改名为其他名字,例如asd
,重新启动进行验证。
ctrl-x到其他文件夹,再启动进行验证。
五、总结
总体思路:1 在项目根目录下新建文件夹并安装python;2 使用相对路径管理项目依赖。
无论怎么弄,项目启动的环境一定依赖是python中的包的。
所以包的更新,都和我已经打包好的环境无关。
以此实现一键启动和项目迁移和项目分发。
依赖包打包在~\runtime\site-packages\
中。
番茄时钟项目打包
yasumi-clock
再练一个。