Python 3.12 安装
下载: 使用清华大学镜像站进行下载。 链接为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
下载文件示例:Anaconda3-2024.06-1-Windows-x86_64.exe
安装时注意目录必须为空目录,自动安装即可。该版本不支持自动环境变量配置,需手动配置。
环境变量配置
添加如下环境变量(注意替换实际安装路径):
D:\ProgramData\anaconda3
D:\ProgramData\anaconda3\Library\mingw-w64\bin
D:\ProgramData\anaconda3\Library\usr\bin
D:\ProgramData\anaconda3\Library\bin
D:\ProgramData\anaconda3\Scripts
在系统环境变量中添加,建议重启后生效。
检查安装
分别输入 conda -V、conda env list、python 检查安装情况。
修改 pip 路径
若不修改 pip 路径,则会在用户目录下进行安装第三方库。针对当前版本的 Anaconda,需要添加环境变量 PYTHONUSERBASE 到安装目录。
如 D:\ProgramData\anaconda3\。修改后通过命令 python -m site 查看。
如果通过 -help 查看显示的是 frozen [--user-base] [--user-site],表示无法用通用方式修改 pip 安装位置,只能用这种方式。
虽然显示安装路径不存在,但系统会自动校准到 Python 对应的库文件夹下。之后所有安装的库都与基本库一样。每次使用 pip 安装时,建议使用管理员模式的终端。
通用方式修改 pip 路径
pip 的安装路径可能为 C:\Users\用户名\AppData\Roaming\Python\Python312\。执行 python -m site 查看目录。
好处是安装的环境都会与基本安装文件分离,坏处则是会安装到 C 盘。文件分离的话,方便用 conda 建立隔离环境。
若要修改 pip 安装路径,则在 anaconda/Lib 下有个 site.py 文件,替换全局变量值:
USER_SITE = r"D:\ProgramData\anaconda3\lib\site-packages"
USER_BASE = r"D:\ProgramData\anaconda3\Scripts"
该文件如何确定则通过 python -m site -help 实现。若未出现文件地址,而是出现 frozen [--user-base] [--user-site] 表示不可更改,则需要将用户目录添加到环境变量:
C:\Users\用户名\AppData\Roaming\Python\Python312\Scripts
C:\Users\用户名\AppData\Roaming\Python\Python312\site-packages
frozen [--user-base] [--user-site] 处理
若出现冻结用户路径,则需要通过添加一个系统环境变量名来强制选择:
PYTHONUSERBASE
值为 Python 安装路径上,或改成 Python\Python312 格式。
那么安装目录和环境配置都要相应调整。例如指定到在 anaconda 目录下:
D:\ProgramData\anaconda3\
但是后续的 pip 安装得使用管理员模式才行。
换源
删除用户目录下的 .condarc 文件,然后使用命令 conda config --set show_channel_urls yes 之后会重新生成新的 condarc 文件。打开文件,更改为以下内容:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
输入命令 conda clean -i。然后查看环境 conda info --envs,并使用 activate base 激活 base 环境。
pip 换源
输入命令 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/。更新 pip pip install pip -U。在更新前,可能需要更新一下 pip:
python -m pip install pip -U
安装一次 numpy 检验。
附录:列表的赋值类型和 py 打包
列表赋值
BUG 复现
编写小程序时遇到列表赋值问题。代码如下:
# -*- coding: utf-8 -*-
a_list = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
c_list = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
if len(a_list):
for j in range(16):
a_list[j] = str(a_list[j]) + '_' + str(j)
c_list[j] = a_list
循环 16 次后列表 a 应该变成 ['0_0', '1_1', ...]。但在第 1 次循环以后,c[0] 的值一直在变,相当于把 c_list[0] 变成了 c_list[1]...最后得出的列表 c 的值也是每一项完全一样。
这是因为赋值是指向地址,地址里面的值一直变化,导致赋值也一直变化。
代码改进
解决方法是用深度复制或者 copy 函数。
方法一:循环套循环深度复制
for i in range(16):
c_list[j].append(a_list[i])
方法二:使用 copy 函数
c_list[j] = a_list.copy()
同样能解决问题。问题根源在于 Python 中变量指向的是内存地址而不是值本身。只要赋值是指向一个列表整体的,那么就是指向的一个指针内存地址。解决方法是将每个值深度复制赋值,或者用 copy 函数单独赋值。
py 打包
PyInstaller 打包 exe(包括打包资源文件)。
依赖包及其对应版本号示例:
- PyQt5 5.10.1
- PyQt5-Qt5 5.15.2
- PyQt5-sip 12.9.0
- Pyinstaller 4.5.1
- pyinstaller-hooks-contrib 2021.3
常用命令:
pyinstaller -F setup.py打包 exepyinstaller -F -w setup.py不带控制台的打包pyinstaller -F -i xx.ico setup.py打包指定 exe 图标
打包 exe 参数说明:
-F:打包后只生成单个 exe 格式文件;-D:默认选项,创建一个目录,包含 exe 文件以及大量依赖文件;-c:默认选项,使用控制台;-w:不使用控制台;-p:添加搜索路径;-i:改变生成程序的 icon 图标。
如果要打包资源文件,需要对代码中的路径进行转换处理。py 程序里面的路径要从 ./xxx/yy 换成 xxx/yy 并且进行路径转换。
def get_resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
而后在 spec 文件中的 datas 部分加入目录,如:
a = Analysis(['cxk.py'], pathex=['D:\\Python Test\\cxk'], binaries=[], datas=[('root','root')], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False)
而后直接 pyinstaller -F setup.spec 即可。
如果打包的文件过大,则更改 spec 文件中的 excludes,把不需要的库写进去(但是已经在环境中安装了的)就行。这些不要了的库在上一次编译时的 shell 里面输出。然后用 pyinstaller --clean -F 某某.spec 清理缓存后重新打包。


