背景
写python程序的时候经常需要为不同的项目创建不同的环境,每个环境里都要根据需要下载运行程序需要的模块。
conda的简要说明
创建环境这项工作可以通过安装miniconda或者anaconda之后使用conda来管理。
说一下我对miniconda、anaconda、conda的理解:
conda是一个python的包和环境管理工具,可以管理python的环境,也可以像pip一样安装需要的模块,比如scipy、numpy这种,那么如何安装conda这个工具呢?因为conda不是一个单独的工具,而是集成在miniconda或者anaconda软件里的(这里是我自己的理解,不一定准确),所以为了安装conda,我们就需要安装minicoda或者anaconda软件,因为这两个都是以.exe形式存在的,也就是可以从网上下载下来然后安装到电脑上,安装好了miniconda或者anaconda,再配置一下环境啥的,也就相当于电脑上把conda这个管理工具装好了。
miniconda和anaconda的选择
然后说一下miniconda和anaconda的区别,可以理解为miniconda是个精简版,没有多余的东西,anaconda相比miniconda自带了一些科学计算分析等经常要用的模块啥的,比如SciPy、numpy,这样下载好了之后就可以直接用,不用再单独下载这些模块了,缺点就是体积会大很多,比较臃肿。
所以我现在一般还是喜欢下载miniconda然后根据自己的需要再安装模块。具体安装过程可以找一下网上的攻略,可能出现的问题主要就是安装过程中和安装后需要进行一些环境变量的配置,都可以在网上找到相关的资料(主要还是我懒得写了,因为还要放图啥的,比较麻烦)
安装好之后应该会有一个miniconda的命令行工具,运行之后和普通的命令行工具一样,只是最开始会出现一个(base)
字样,表明现在是在base环境下,可以理解为一个最初的虚拟环境。
conda相关的命令
1 | conda -V |
环境管理的相关命令
之后可以创建一个新的环境,名字为
env1
,python版本为3.91
conda create --name env1 python=3.9
可以查看一下当前安装了那些环境,列出的环境中标*的就是当前所在的环境
1
conda env list
激活刚才新建的环境,会发现命令行的最开头从
(base)
变成了(env1)
,说明当前的环境已经变了。1
conda activate env1
要退出当前环境,这样就回到原来的
(base)
环境中1
conda deactivate
删除环境
1
conda remove --name env1 --all
包管理的相关命令
查看当前环境的模块(包)
1
conda list
安装新的模块
1
conda install requests
这里的用法和pip一样,也可以用pip来安装(个人经验是用pip安装之后最终打包出来的exe文件会小一点,不知道对不对)
更新特定模块或者全部模块
1
2conda update requests
conda update -all用pyinstaller打包程序的基本流程
写好的代码如果想在别的机器上使用,又不想再配置一边环境,就可以用pyinstaller
把代码打包成exe可执行文件,这样直接复制到别的地方就可以运行了。
先创建好代码运行的环境,并激活(其实创建好之后可以在VS Code里选择要用的环境)
1 | conda create --name env1 python=3.9 |
安装好相关的模块,这里也可以用pip而不是conda
1 | conda install requests |
其中pyinstaller
是用来打包程序的。
假设写好的python代码文件为123.py
,首先需要进入到代码文件所在的目录,然后运行pyinstaller
1 | pyinstaller -F -w -i xx.ico 123.py |
-F 带这个参数的话,最终会生成一个单独的exe文件,不带这个参数的话,最终会生成一个文件夹,里面有exe文件和其他运行需要的文件。前者的体积可能会小一些,但是程序运行起来会慢一点,因为运行的时候会多一步把文件内容解压到内存中,所以文件越大,相应运行速度也越慢。
-w 这个参数用来控制运行程序时要不要显示控制台窗口,控制台窗口一般是在程序调试的时候用,调试好就不需要了。带这个参数的话就是没有控制台窗口,不带参数就是显示控制台窗口
-i xx.ico 指定打包好的程序的图标,如果图标文件就在当前文件夹下,就直接写ico文件名字就行,不在当前目录的话就把目录带上。不带这个参数的话,会用一个默认的图标。
运行之后,当前目录会生成几个文件夹,打开dist
文件,里面就是最终生成的exe文件了。
其他
除了用pyinstaller
打包之外,也可以用nuitka
,不过我还不太熟练,而且打包的过程感觉比pyinstaller
复杂许多,也没能解决我当时想解决的打开exe文件时间长的问题。