Python 3.12 安装与 Anaconda 环境配置、pip 路径修改及 frozen 问题处理
本文介绍 Python 3.12 稳定版通过 Anaconda 的安装步骤,包括环境变量配置、pip 路径修改及 frozen 问题处理。内容涵盖 conda 和 pip 换源方法,解决了列表赋值时的引用陷阱(指针问题),并提供了 PyInstaller 打包 exe 的详细参数说明及资源文件处理技巧。适合需要搭建 Python 开发环境及进行项目打包的用户参考。

本文介绍 Python 3.12 稳定版通过 Anaconda 的安装步骤,包括环境变量配置、pip 路径修改及 frozen 问题处理。内容涵盖 conda 和 pip 换源方法,解决了列表赋值时的引用陷阱(指针问题),并提供了 PyInstaller 打包 exe 的详细参数说明及资源文件处理技巧。适合需要搭建 Python 开发环境及进行项目打包的用户参考。

下载: 使用清华大学镜像站进行下载。 链接为: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 路径,则会在用户目录下进行安装第三方库。针对当前版本的 Anaconda,需要添加环境变量 PYTHONUSERBASE 到安装目录。
如 D:\ProgramData\anaconda3\。修改后通过命令 python -m site 查看。
如果通过 -help 查看显示的是 frozen [--user-base] [--user-site],表示无法用通用方式修改 pip 安装位置,只能用这种方式。
虽然显示安装路径不存在,但系统会自动校准到 Python 对应的库文件夹下。之后所有安装的库都与基本库一样。每次使用 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
若出现冻结用户路径,则需要通过添加一个系统环境变量名来强制选择:
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 config set global.index-url https://mirrors.aliyun.com/pypi/simple/。更新 pip pip install pip -U。在更新前,可能需要更新一下 pip:
python -m pip install pip -U
安装一次 numpy 检验。
编写小程序时遇到列表赋值问题。代码如下:
# -*- 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 函数单独赋值。
PyInstaller 打包 exe(包括打包资源文件)。
依赖包及其对应版本号示例:
常用命令:
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 清理缓存后重新打包。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online