venv
这里说的环境管理,管理的是Python 解释器版本(比如 3.9 和 3.10 的切换)和 Python 第三方库(如 numpy、torch、openbox)。
在 venv 里 pip install 的包,只存在于这个文件夹里,不会影响系统 Python 或其他环境。
1. 环境管理(创建/删除/查看)
| 操作目标 | 命令 | 说明 |
|---|---|---|
| 创建环境 | python -m venv 环境名称 | 例如:python -m venv mosmac-venv,会在当前目录生成同名文件夹 |
| 删除环境 | rm -rf 环境名称 | 直接物理删除文件夹,没有类似 conda remove 的专门指令 |
| 查看环境列表 | 没有内置命令 | 只能靠 ls 或 dir 查看当前目录下有哪些 venv 文件夹(因为 venv 不注册到系统,位置就在项目里) |
2. 激活与退出
| 操作 | Linux / macOS (你的容器) | Windows |
|---|---|---|
| 激活 (Enter) | source 环境名称/bin/activate | 环境名称\Scripts\activate |
| 退出 (Exit) | deactivate | deactivate |
| 激活后标志 | 终端提示符前出现 (环境名称) | 终端提示符前出现 (环境名称) |
验证是否激活成功:激活后执行
which python,路径应指向环境名称/bin/python,而不是/usr/bin/python。
3. 包管理
因为 venv 没有自带的 conda install,所有包操作都通过 pip 完成。
| 操作 | 命令(需在激活状态下执行) | 对应 Conda 命令 |
|---|---|---|
| 安装包 | pip install 包名 | conda install 包名 |
| 指定镜像安装 | pip install -i 镜像源 包名 | (Conda 换源需修改配置文件) |
| 批量安装 | pip install -r requirements.txt | conda install --file requirements.txt |
| 导出环境 | pip freeze > requirements.txt | conda env export > environment.yml |
| 查看已安装包 | pip list | conda list |
| 查看某个包信息 | pip show 包名 | conda info 包名 |
| 卸载包 | pip uninstall 包名 | conda remove 包名 |
4. 关于 Python 版本的选择
-
venv创建环境时,默认使用你执行命令时的python版本。 -
如果你想指定某个特定 Python 版本,必须在创建前指定,例如:
python3.8 -m venv myenv # 创建一个 Python 3.8 的环境 python3.9 -m venv myenv # 创建一个 Python 3.9 的环境注意:
venv不支持在创建后随意切换 Python 版本(不像 Conda 可以在 yml 里指定),所以创建前确认好版本。
5. 关于“位置”(关键习惯差异)
这是一个很容易混淆的点:
- Conda:环境统一放在
~/anaconda3/envs/里,全局共用。 - venv:环境就放在你的项目文件夹里(例如
/home/ario/paper_experiment/mosmac-venv)。
带来的习惯改变:
-
如果要把代码拷给别人,不需要拷这个
mosmac-venv文件夹(太大、且路径可能不对),只需要把requirements.txt发过去,让对方在自己机器上重新python -m venv xxx+pip install -r requirements.txt即可。在对应环境中执行如下命令生成
requirements.txt文件pip freeze > requirements.txt
常用流程
-
初建环境:
cd /home/ario/paper_experiment python -m venv mosmac-venv -
日常跑实验时(每次新开终端):
source /home/ario/paper_experiment/mosmac-venv/bin/activate cd /workspace/llamatune python run-smac.py # 你的实验脚本 -
搞砸了想重来:
deactivate # 先退出 rm -rf mosmac-venv # 删掉旧的 python -m venv mosmac-venv # 重新创建