Python连接云端Linux服务器进行远程 (后端开发/深度学习)时候的注意事项
- [Python 环境管理工具总览](#Python 环境管理工具总览)
-
- 一、定义与区别
- 二、详细解释每个工具的作用
-
- [1. **pip** ------ Python 包管理器](#1. pip —— Python 包管理器)
- [2. **pyenv** ------ Python 版本管理器](#2. pyenv —— Python 版本管理器)
- [3. **venv / virtualenv / pipenv / poetry** ------ 虚拟环境工具](#3. venv / virtualenv / pipenv / poetry —— 虚拟环境工具)
-
- [🟩 venv (Python 3.3+ 内置)](#🟩 venv (Python 3.3+ 内置))
- [🟨 virtualenv (旧版替代方案)](#🟨 virtualenv (旧版替代方案))
- [🟥 pipenv](#🟥 pipenv)
- [🟦 poetry](#🟦 poetry)
- [4. **conda** ------ 集成环境与包管理器](#4. conda —— 集成环境与包管理器)
- 三、对比表格:核心工具功能对比
- 四、关键问题解答
-
- [✅ 问题 1:`venv` / `pipenv` / `poetry` 创建的环境 vs `conda` 创建的环境有什么区别?------❤️](#✅ 问题 1:
venv/pipenv/poetry创建的环境 vsconda创建的环境有什么区别?——❤️) - [✅ 问题 2:Anaconda 和 Miniconda 有什么区别?](#✅ 问题 2:Anaconda 和 Miniconda 有什么区别?)
- [✅ 问题 1:`venv` / `pipenv` / `poetry` 创建的环境 vs `conda` 创建的环境有什么区别?------❤️](#✅ 问题 1:
- 五、一句话总结
-
- [一般搭配使用 pyenv + pip + venv:------❤️🤩🤔](#一般搭配使用 pyenv + pip + venv:——❤️🤩🤔)
- [Linux 和 shell](#Linux 和 shell)
-
- 项目结构------❤️
- 常用shell命令------❤️
- which和whereis区别
-
- [📊 一、详细对比表](#📊 一、详细对比表)
- [✅ 实际例子演示](#✅ 实际例子演示)
-
- [示例 1:用 `which` 查找 `python`](#示例 1:用
which查找python) - [示例 2:用 `whereis` 查找 `python`](#示例 2:用
whereis查找python)
- [示例 1:用 `which` 查找 `python`](#示例 1:用
- [🧩 二、使用场景详解](#🧩 二、使用场景详解)
-
- [✅ `which` 的典型用途:](#✅
which的典型用途:) - [✅ `whereis` 的典型用途:](#✅
whereis的典型用途:)
- [✅ `which` 的典型用途:](#✅
- [🧠 三、深入理解:为什么 `whereis` 不总是可靠?](#🧠 三、深入理解:为什么
whereis不总是可靠?) - [✅ 总结口诀(便于记忆)](#✅ 总结口诀(便于记忆))
- 安装依赖
-
- [✅ 一、前提:项目结构](#✅ 一、前提:项目结构)
- [📦 二、推荐方法:使用 `pip` + `requirements.txt`(最常用)](#📦 二、推荐方法:使用
pip+requirements.txt(最常用)) -
- [✅ 方法1:直接用 `pip` 安装单个包(临时或测试)](#✅ 方法1:直接用
pip安装单个包(临时或测试)) - [✅ 方法2:使用 `requirements.txt` 文件(强烈推荐)](#✅ 方法2:使用
requirements.txt文件(强烈推荐)) -
- [Step 1:创建 `requirements.txt` 文件](#Step 1:创建
requirements.txt文件) - [Step 2:==安装这些依赖(在虚拟环境中)==](#Step 2:==安装这些依赖(在虚拟环境中)==)
- [Step 3:导出当前环境的所有依赖(生成 `requirements.txt`)](#Step 3:导出当前环境的所有依赖(生成
requirements.txt))
- [Step 1:创建 `requirements.txt` 文件](#Step 1:创建
- [✅ 方法1:直接用 `pip` 安装单个包(临时或测试)](#✅ 方法1:直接用
- [🔐 三、使用虚拟环境(必须操作!)------❤️](#🔐 三、使用虚拟环境(必须操作!)——❤️)
- [四、💡 小技巧:常用命令汇总](#四、💡 小技巧:常用命令汇总)
- 五、不小心安装到了全局怎么办呢------❤️
- 六、特殊的requirements.txt
-
- [❓ 可以正常安装吗?](#❓ 可以正常安装吗?)
-
- [✅ 答案:✅ **可以!**](#✅ 答案:✅ 可以!)
- [🔍 原因解释](#🔍 原因解释)
- [⚠️ 注意:](#⚠️ 注意:)
- [❓为什么最后要写 `-e .`?这样有什么好处?------❤️](#❓为什么最后要写
-e .?这样有什么好处?——❤️) -
- [🎯 答案:`-e .` 的作用是 ------ **"可编辑模式安装"**](#🎯 答案:
-e .的作用是 —— “可编辑模式安装”) - [💡 什么是"可编辑模式"(editable install)?](#💡 什么是“可编辑模式”(editable install)?)
- [🌟 好处如下:](#🌟 好处如下:)
- [⚠️ 注意事项](#⚠️ 注意事项)
- [🎯 答案:`-e .` 的作用是 ------ **"可编辑模式安装"**](#🎯 答案:
- [==✅ 如何编写 `setup.py`?(配合 `-e .` 使用)==](#==✅ 如何编写
setup.py?(配合-e .使用)==) - [✅ 总结](#✅ 总结)
- [七、🔁 进阶做法:分离配置和安装逻辑](#七、🔁 进阶做法:分离配置和安装逻辑)
-
- [✅ `requirements.txt`(生产环境)](#✅
requirements.txt(生产环境)) - [✅ `requirements-dev.txt`(开发环境)](#✅
requirements-dev.txt(开发环境)) - [🧪 最终测试](#🧪 最终测试)
- [✅ `requirements.txt`(生产环境)](#✅
- .gitingore的书写
-
- [🔹 什么是 `.gitignore`?](#🔹 什么是
.gitignore?) - [🔹 不同写法的含义](#🔹 不同写法的含义)
-
- [✅ `build/`](#✅
build/) - [✅ `/build/`](#✅
/build/) - [✅ `*.log`](#✅
*.log) - [✅ `/log/`](#✅
/log/) - [✅ `native_ai_robot/data`](#✅
native_ai_robot/data)
- [✅ `build/`](#✅
- [🔹 如何忽略 `test.py`?](#🔹 如何忽略
test.py?) - [✅ 小贴士](#✅ 小贴士)
- [🔹 什么是 `.gitignore`?](#🔹 什么是
Python 环境管理工具总览
一、定义与区别
注意:
pyenv只是管理python版本,不提供虚拟环境,需配合venv或virtualenv
pyenv管理 Python 版本,pip管理包,conda` 既管环境又管包
| 工具名称 | 类型 | 是否自带 | 主要功能 | 说明 |
|---|---|---|---|---|
| pip | 包管理器 | ✅ 是 | 安装/卸载 Python 第三方包 | 只管"包",不管理 Python 版本或环境 |
| pyenv | Python 版本管理器 | ❌ 否 | 切换不同版本的 Python 解释器(如 3.8, 3.9) | 不管包、不创建虚拟环境 |
| venv | 虚拟环境工具 | ✅ 是 | 创建隔离的 Python 环境(包含 pip) | 针对当前 Python 版本创建环境 |
| virtualenv | 虚拟环境工具 | ❌ 否 | 创建隔离的 Python 环境 | venv 的前身,功能类似 |
| pipenv | 包+环境管理工具 | ❌ 否 | 自动管理虚拟环境 + 依赖包(Pipfile) |
结合了 pip 和 virtualenv |
| poetry | 包+环境管理工具 | ❌ 否 | 完整项目管理(依赖、构建、发布等) | 更现代化,适合复杂项目 |
| conda | 环境+包管理器 | ❌ 否 | 创建环境 + 安装包(支持非 Python 包) | 常用于数据科学领域 |
二、详细解释每个工具的作用
1. pip ------ Python 包管理器
-
作用 :安装、卸载、升级 Python 包(如
requests,numpy) -
是否自带? ✅ 是(所有 Python 安装都带)
-
例子 :
bashpip list pip install flask
🔍 注意:
pip依赖于当前激活的 Python 解释器。不同 Python 版本下可能有多个 pip。
2. pyenv ------ Python 版本管理器
pyenv 不直接替换系统的 Python,而是通过 shim 层(代理)来切换版本
-
作用:安装和切换不同版本的 Python 解释器(比如 3.7, 3.8, 3.9, 3.11)
-
是否自带? ❌ 否(需要手动安装)
-
怎么用?
bash# 安装 pyenv(macOS/Linux) curl https://pyenv.run | bash pyenv versions pyenv install 3.10.0 pyenv global 3.10.0 pyenv local 3.9.6 # 当前目录使用 3.9.6 -
特点 :
- 只管理 Python 版本,不创建环境。
- 通常和
venv或virtualenv配合使用。
⚠️ 没有
pyenv,你就无法轻松切换 Python 版本。
3. venv / virtualenv / pipenv / poetry ------ 虚拟环境工具
🟩 venv (Python 3.3+ 内置)
-
作用 :创建一个独立的 Python 环境(包含自己的
pip、site-packages) -
是否自带? ✅ 是(Python 3.3+ 内置)
-
例子 :
bashpython -m venv venv # venv 是Python 的内置模块,用于管理虚拟环境 source venv/bin/activate # Linux/Mac // 以后都用venv,不要myenv,因为venv默认不被git了 venv\Scripts\activate # Windows // 以后都用venv,不要myenv,因为venv默认不被git了 pip install requests
🟨 virtualenv (旧版替代方案)
-
功能类似
venv,但可以用于更老的 Python 版本(如 2.7) -
需要单独安装:
bashpip install virtualenv virtualenv venv // 以后都用venv,不要myenv,因为venv默认不被git了
💡 推荐使用
venv,因为它是标准库的一部分。
🟥 pipenv
-
作用 :结合
virtualenv+pip,自动创建环境,并用Pipfile管理依赖 -
是否自带? ❌ 否
-
优点 :
- 自动生成
Pipfile和Pipfile.lock - 一键安装所有依赖
- 支持开发/生产环境分离
- 自动生成
-
例子 :
bashpipenv install requests pipenv shell # 进入环境
🟦 poetry
-
作用:现代项目管理工具,支持包管理 + 构建 + 发布
-
是否自带? ❌ 否
-
优点 :
- 使用
pyproject.toml文件(比setup.py更简洁) - 支持依赖解析、锁文件、打包、发布到 PyPI
- 更适合大型项目或开源项目
- 使用
-
例子 :
bashpoetry init # 初始化一个新的 Poetry 项目,创建 pyproject.toml 配置文件 poetry add requests # 安装最新版 requests 包 poetry shell # 进入虚拟环境,如果虚拟环境不存在会自动创建
✅ 总结:
venv和virtualenv:只做"隔离环境"pipenv和poetry:同时做"环境管理 + 包管理"
4. conda ------ 集成环境与包管理器
- 作用 :
- 创建隔离的环境(类似
venv) - 安装包(包括 Python 包和非 Python 包,如 C/C++ 库)
- 创建隔离的环境(类似
- 是否自带? ❌ 否(需安装 Anaconda 或 Miniconda)
- 功能强大,尤其在数据科学中广泛使用
bash
conda create -n myproj python=3.9
conda activate myproj
conda install numpy pandas
🔍 优势:能处理编译性语言的依赖(如
scipy需要 BLAS/LAPACK)
三、对比表格:核心工具功能对比
| 工具/功能 | 管理 Python 版本 | 管理虚拟环境 | 管理包 | 支持非 Python 包 | 是否自带 | 推荐用途 |
|---|---|---|---|---|---|---|
| pip | ❌ | ❌ | ✅ | ❌ | ✅ | 安装单个包 |
| pyenv | ✅ | ❌ | ❌ | ❌ | ❌ | 多版本切换(开发调试) |
| venv | ❌ | ✅ | ✅ | ❌ | ✅ | 创建轻量虚拟环境 |
| virtualenv | ❌ | ✅ | ✅ | ❌ | ❌ | 兼容旧 Python 版本 |
| pipenv | ❌ | ✅ | ✅ | ❌ | ❌ | 中小型项目,快速启动 |
| poetry | ❌ | ✅ | ✅ | ❌ | ❌ | 大型项目,标准化流程 |
| conda | ✅ | ✅ | ✅ | ✅(C/C++等) | ❌ | 数据科学、AI、复杂依赖项目 |
四、关键问题解答
✅ 问题 1:venv / pipenv / poetry 创建的环境 vs conda 创建的环境有什么区别?------❤️
| 方面 | venv / pipenv / poetry 环境 |
conda 环境 |
|---|---|---|
| 核心机制 | 基于当前 Python 解释器,复制其 bin (解释器)和 lib(标准库) |
独立的可执行环境,有自己的 Python 和库 |
| 是否自带 Python? | 否(依赖已有的 Python) | ✅ 否(可指定版本) |
| Python 版本控制 | 仅限已安装的版本 | ✅ 可直接安装任意版本(通过 conda install python=3.9) |
| 包来源 | PyPI(pip) |
Anaconda 仓库 + PyPI(可用) |
| 非 Python 包支持 | ❌(只能通过 pip 安装纯 Python 包) |
✅(如 gcc, openblas, r-base) |
| 跨平台兼容性 | 很好 | 非常好,尤其在科学计算场景 |
| 推荐使用场景 | Web 开发、脚本项目、小型应用 | 数据科学、机器学习、HPC、复杂依赖 |
🧠 总结:
- 如果你要跑一个 Flask Web 项目 → 用
venv或pipenv就够了
- 用
miniconda+conda+pip(数据科学)- 优先用
conda install xxx,如果找不到再用pip install xxx- 如果你要训练深度学习模型,要用
tensorflow+cuDNN→conda更合适
- 用
pyenv+venv+pip(通用开发)- 如果是大型项目 / 开发团队, 用
poetry+pyenv(管理多版本 + 标准化)
✅ 问题 2:Anaconda 和 Miniconda 有什么区别?
| 特性 | Anaconda | Miniconda |
|---|---|---|
| 大小 | 很大(约 5GB) | 很小(约 300MB) |
| 预装软件 | 包含大量科学包(如 NumPy, Pandas, Jupyter) | 只包含 conda, python, pip 等基本工具 |
| 是否自带 pip | ✅ 是 | ✅ 是 |
| 是否自带 Jupyter? | ✅ 是 | ❌ 否 |
| 是否支持自定义安装? | ✅ 支持 | ✅ 支持 |
| 适用人群 | 初学者、数据科学家、不想配置的人 | 有经验用户、喜欢自己选择包的人 |
✅ 推荐:
- 新手建议从 Miniconda 开始,更灵活。
- 如果你想要开箱即用的环境(比如马上开始学数据分析),选 Anaconda 更方便。
📦 补充:两者都可以用conda安装任何包!
五、一句话总结
pyenv:用来切换 Python 版本(我需要哪个 Python?)venv/pipenv/poetry:用来创建隔离环境(我的项目运行在哪个环境中?)pip:用来安装包(这个项目需要哪些库?)conda:既能切换 Python 版本又能安装包(全能选手,特别适合科学计算)- 如果你要跑一个 Flask Web 项目 → 用
venv或pipenv就够了。- 如果你要训练深度学习模型,要用
tensorflow+cuDNN→conda更合适。
一般搭配使用 pyenv + pip + venv:------❤️🤩🤔
python
# 安装 pyenv(macOS/Linux)
curl https://pyenv.run | bash
# 安装 Python
pyenv install --list // 可安装的python版本
pyenv install 3.10.0
pyenv versions # 查看已经安装的python版本
// pyenv shell <version> // 当前终端会话(进程)
pyenv local <version> // 当前目录及其子目录
//pyenv global 2.7.10 // 切换python版本
// pyenv global system // 切换原来版本
pyenv version # 查看正在使用的版本
python --version
# 创建虚拟环境(推荐使用 venv 或 pipenv)
python -m venv venv // 注意Python 3.3+ 才是内置
// 之前的用pip install virtualenv
// 创建环境的语法也不一样了
// 用 virtualenv venv ,其余的激活、退出一样的
source venv/bin/activate // 以后都用venv,不要myenv,因为venv默认不被git了
pyenv version # 查看正在使用的版本
python --version
//pip install requests
cd ... 切到requirements.txt的路径
pip install -r requirements.txt
pip list
# 查看某个包的安装路径,从而判断是 全局安装了还是 在虚拟环境里面
pip show numpy
| 命令 | 作用 | 范围 | 是否持久化 |
|---|---|---|---|
pyenv shell <version> |
设置当前终端使用的 Python 版本 | 当前终端会话(进程) | ❌ 不持久,关闭后失效 |
pyenv local <version> |
在当前目录下设置 Python 版本 | 当前目录及其子目录 | ✅ 持久,当前目录创建一个 .python-version 文件,内容是版本号 |
pyenv global <version> |
全局设置默认 Python 版本 | 所有项目、所有终端 | ✅ 持久,写入 ~/.pyenv/version 文件 |
| 场景 | 推荐做法 |
|---|---|
| 开发一个项目,需要固定版本 | 用 pyenv local(创建 .python-version) |
| 多个项目,不同版本 | 用 local,每个项目独立设置 |
| 日常开发,想保持一致 | 用 pyenv global 设置默认版本 |
| 临时测试/调试 | 用 pyenv shell(记得退出后恢复) |

Linux 和 shell
项目结构------❤️

常用shell命令------❤️
cat /etc/shells # 可用的shell有哪些
echo $HOME # 家的位置
echo $PATH # 环境变量
echo $SHELL # 当前用的版本
echo $0 # 当前脚本名称
who am i
which pyhton
where pyton
pwd
date
ls -al
vi hello.sh
which和whereis区别
which查找可执行的命令(在$PATH中找到的可运行程序),
whereis查找二进制文件、源代码和帮助文档(但不检查路径,只查标准位置)。
📊 一、详细对比表
| 特性 | which |
whereis |
|---|---|---|
| 作用 | 查找某命令是否在 $PATH 中,并返回其完整路径 |
查找程序相关的文件(二进制、源码、手册页等) |
| 查找范围 | 只在环境变量 $PATH 中搜索 |
在预定义的标准目录中搜索(如 /bin, /usr/bin, /usr/local/bin, /usr/share/man 等) |
| 是否能运行? | ✅ 能运行(如果存在) | ❌ 不判断能否运行,只是列出可能的位置 |
| 输出内容 | 单个路径(通常是可执行文件) | 多个路径:二进制、源码、手册页 |
| 是否支持别名? | ✅ 支持(会显示别名对应的路径) | ❌ 不支持(只找真实文件) |
| 适用场景 | 检查命令是否存在并获取执行路径 | 查看某个命令有哪些配套文件(特别是开发用途) |
✅ 实际例子演示
示例 1:用 which 查找 python
bash
$ which python
/usr/bin/python3
👉 表示在 $PATH 中找到了 python 命令,路径是 /usr/bin/python3。
示例 2:用 whereis 查找 python
bash
$ whereis python
python: /usr/bin/python3 /usr/lib/python3 /usr/share/man/man1/python.1.gz
👉 输出了三个部分:
- 二进制文件 :
/usr/bin/python3 - 库文件/源码 :
/usr/lib/python3 - 手册页 :
/usr/share/man/man1/python.1.gz
💡 注意:
whereis不检查PATH,它只在系统默认的"常见位置"搜索。
🧩 二、使用场景详解
✅ which 的典型用途:
-
检查某个命令是否可用:
bash$ which ls /bin/ls→ 如果返回路径,则说明
ls存在;否则不存在。 -
查看当前使用的命令版本(比如区分
python是哪个解释器):bash$ which python /home/user/.pyenv/shims/python→ 显示你当前激活的 Python 是通过 pyenv 安装的。
-
判断是否有冲突的命令(多个同名命令):
bash$ which python /usr/bin/python /home/user/.local/bin/python
⚠️ 注意:
which是 shell 内建命令(type更准确),但大多数情况够用。
✅ whereis 的典型用途:
-
查找一个命令的完整信息(尤其是开发人员):
bash$ whereis gcc gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz→ 可以看到编译器、库文件和手册页。
-
检查是否安装了某个软件包的完整组件(源码 + 手册):
bash$ whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
🧠 三、深入理解:为什么 whereis 不总是可靠?
虽然 whereis 很方便,但它有几个限制:
-
只在预设路径下搜索 (通常为
/bin,/usr/bin,/usr/local/bin等)。→ 如果你把程序放在非标准路径(如
/opt/myapp),whereis就找不到它。 -
不会检查是否在
$PATH中→ 即使你安装了
python,但如果没加到$PATH,which找不到,而whereis还可能显示出来(因为它在标准路径中)
✅ 总结口诀(便于记忆)
🎯
which:你问我在哪?我只看$PATH,只看具体的命令能跑就给你地址!🎯
whereis:我要找全家福!二进制、源码、手册都列出来!
安装依赖
✅ 一、前提:项目结构
假设你有一个 Python 项目:
myproject/
├── main.py
├── requirements.txt
└── setup.py (可选)
⚠️ 重点:所有依赖操作都应在虚拟环境中进行!避免污染全局 Python 环境
使用
venv创建一个独立的 每一个Python 环境都会包含自己的pip(基础工具)、site-packages(用于安装第三方库)其中豆
python版本是 你所创建venv时候的 版本
📦 二、推荐方法:使用 pip + requirements.txt(最常用)
✅ 方法1:直接用 pip 安装单个包(临时或测试)
bash
# 安装某个包,比如 requests
pip install requests
# 安装特定版本(如 2.28.1)
pip install requests==2.28.1
# 安装来自 GitHub 的包(注意:需要先安装 git)
pip install git+https://github.com/requests/requests.git@v2.28.1
🔍 注释:
pip是 Python 标准包管理工具。- 不建议在全局环境下用
pip install,容易造成冲突。- 常用于快速测试或开发阶段。
✅ 方法2:使用 requirements.txt 文件(强烈推荐)
这是标准做法:将所有依赖写在一个文件里,便于复现环境。
Step 1:创建 requirements.txt 文件
txt
# requirements.txt
# 这是一个注释行,以 # 开头会被忽略
# 使用 pip freeze 生成
# 也可以手动添加版本号
# Web 框架
Flask==2.3.3
# HTTP 请求库
requests>=2.28.0,<3.0.0
# 数据处理
pandas==2.0.3
# 数据库连接
psycopg2-binary==2.9.6
# 日志
loguru==0.7.0
# 可选依赖(非必需)
pytest>=7.0.0
black==23.1.0
🔍 注释:
- 使用
==表示精确版本(安全稳定)。- 使用
>=表示大于等于某个版本,允许更新但不跳大版本。~=表示"波浪符"版本控制(更智能):例如numpy~=1.21→ 允许 1.21.x,但不允许 1.22。- 你可以用
pip show package查看已安装包信息。
Step 2:安装这些依赖(在虚拟环境中)
bash
# 从 requirements.txt 安装所有依赖
pip install -r requirements.txt
🔍 注释:
-r表示 read from file(从文件读取)。- 所有依赖会自动安装,包括它们的子依赖。
- 安装后可以运行
pip list查看当前已安装包。
Step 3:导出当前环境的所有依赖(生成 requirements.txt)
bash
# 在虚拟环境中运行(确保只安装了你需要的包)
pip freeze > requirements.txt
🔍 注释:
pip freeze输出当前环境中所有安装的包及其版本。>将输出重定向到文件,覆盖原有内容。- ✅ 推荐:每次完成开发或部署前,执行一次
pip freeze > requirements.txt来记录当前环境
🔐 三、使用虚拟环境(必须操作!)------❤️
为了隔离项目、防止冲突,请务必使用虚拟环境。
1、创建虚拟环境(推荐方式:使用 venv)
bash
# 在项目根目录下创建虚拟环境
python -m venv venv
# 或者用 Python 3.8+
python3 -m venv env
🔍 注释:
venv是 Python 内置模块。- 会创建一个名为
venv的文件夹(你也可以叫它env)。- 包含独立的 Python 解释器和
pip。
2、激活虚拟环境
进去之后 ==只是依赖变了,其他的当前项目路径(pwd) 以及 执行的命令都没变!!!==正常操作就可以呢!!!
-
Linux/macOS:
bashsource venv/bin/activate -
Windows (CMD):
cmdvenv\Scripts\activate -
Windows (PowerShell):
powershellvenv\Scripts\Activate.ps1
🔍 注释:
- 激活后命令行前会有
(venv)提示,表示你现在在虚拟环境中- 所有
pip install都会作用于这个环境。
3、安装依赖
bash
# 从 requirements.txt 安装所有依赖
pip install -r requirements.txt
4、运行项目、调试
5、退出虚拟环境
bash
deactivate
❌ 不要提交
venv/到 Git!✅ 应该提交
requirements.txt!
四、💡 小技巧:常用命令汇总
bash
# 1. 创建虚拟环境
python -m venv venv
# 2. 激活环境
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows CMD
# 3. 安装依赖
pip install -r requirements.txt
# 4. 查看已安装包
pip list
# 5. 导出依赖(生成 requirements.txt)
pip freeze > requirements.txt
# 6. 卸载包
pip uninstall requests
# 7. 更新包
pip install -U requests
五、不小心安装到了全局怎么办呢------❤️
✅ 方法1:卸载全局的包
你可以列出已安装的包,并手动删除它们。
# 查看所有已安装的包(包括全局的)
pip list
# 找出哪些是你从 requirements.txt 安装的,然后一个个卸载
pip uninstall 包名
或者更高效地一次性卸载:
✅ 方法2:# 假设你已经保存了原来的 requirements.txt
# 直接用 pip uninstall -r 要求文件(但注意这是全局的!)
pip uninstall -r requirements.txt
✅ 最后:检查一波
pip list // 看看是不是只有pip , setuptools 了呢
⚠️ 注意:pip uninstall -r requirements.txt 是危险操作,会把你在当前环境中安装的所有包都卸载!所以请谨慎使用。
六、特殊的requirements.txt
--index-url http://
--trusted-host
-e .
❓ 可以正常安装吗?
这样的
requirements.txt能用pip install -r requirements.txt安装吗?
✅ 答案:✅ 可以!
虽然这个写法看起来有点奇怪(尤其是 --index-url 和 --trusted-host),但这是合法的,并且能被 pip install -r 正确解析。
🔍 原因解释
这是一个 requirements.txt 文件的内容。注意:
--index-url:指定从 哪个镜像源下载包--trusted-host:允许连接不安全的主机(比如没有 HTTPS 的私有仓库)-e .:表示"以可编辑模式安装当前目录下的包"
⚠️ 注意:
这些参数是 pip 的命令行选项,不是 Python 包名!
所以如果你直接跑:
bash
pip install -r requirements.txt
它会:
- 使用
http://pip.baidu.com/...作为下载源 - 忽略 SSL 校验(因为
--trusted-host) - 安装当前目录(
.)中的项目为"可编辑"状态
❓为什么最后要写 -e .?这样有什么好处?------❤️
🎯 答案:-e . 的作用是 ------ "可编辑模式安装"
这在开发过程中非常重要!
💡 什么是"可编辑模式"(editable install)?
当你运行:
bash
pip install -e .
它会在系统中创建一个 符号链接(symbolic link) 或 egg-link 文件,指向当前目录的项目代码。
举个例子:
假设你的项目结构是:
myproject/
├── setup.py
└── myproject/
└── __init__.py
执行:
bash
cd myproject
pip install -e .
会把 myproject/ 目录作为一个 Python 包,安装到你的虚拟环境中,但:
✅ 你的代码文件没有被复制到
site-packages,而是通过软链接引用。✅ 从而达到修改原始代码后,无需重新安装即可生效!
🌟 好处如下:
| 优点 | 说明 |
|---|---|
| 🛠️ 开发效率高 | 改代码 → 立即生效,不用 pip uninstall + pip install |
| 🔄 多模块共享 | 可以多个项目依赖同一个本地库,而不会重复打包 |
| 🧪 调试方便 | 你可以用 IDE 直接打断点调试 myproject/__init__.py |
| 🔁 自动更新 | 如果你在 Git 中拉取了新代码,下次运行程序自动加载最新版 |
类比 Java:就像你在 IDEA 中把
src/main/java添加为模块路径,而不是编译成 JAR 后再引入。
⚠️ 注意事项
- 必须有
setup.py文件,并正确声明项目信息 - 不能用于非 Python 项目(如 C++ 扩展等)
✅ 如何编写 setup.py?(配合 -e . 使用)
python
from setuptools import setup, find_packages
setup(
name="myproject",
version="0.1.0",
packages=find_packages(),
install_requires=[
"flask>=2.0",
"sqlalchemy>=1.4",
# 其他依赖...
],
entry_points={
'console_scripts': [
'myapp=main:main',
],
},
)
然后运行:
bash
pip install -e .
✅ 总结
| 问题 | 回答 |
|---|---|
requirements.txt 里有 --index-url 和 --trusted-host,还能用 pip install -r 吗? |
✅ 可以!这是合法的 pip 参数,会被正确处理 |
为什么要加 -e .?有什么好处? |
✅ 可编辑模式: • 代码修改后自动生效 • 适合开发阶段 • 类似 Java 的 "source code path" |
七、🔁 进阶做法:分离配置和安装逻辑
建议你将 requirements.txt 拆分为多个:
✅ requirements.txt(生产环境)
txt
flask==2.3.3
sqlalchemy==2.0.22
pymysql==1.1.0
✅ requirements-dev.txt(开发环境)
txt
-r requirements.txt
-e .
pytest>=7.0
black
isort
然后开发时运行:
bash
pip install -r requirements-dev.txt
🧪 最终测试
确保一切正常:
bash
# 安装
pip install -r requirements.txt
# 验证是否安装成功
python -c "import myproject; print(myproject.__version__)"
# 修改代码看看是否生效
echo "print('Hello from dev!')" >> myproject/__init__.py
python -c "import myproject; print(myproject.__doc__)"
.gitingore的书写
❌ 不要提交
venv/到 Git!✅ 应该提交
requirements.txt!
🔹 什么是 .gitignore?
它是 Git 用来忽略某些文件或目录 不被提交到版本库中的配置文件。
比如:编译输出、日志、IDE 配置等,不需要纳入版本控制。
🔹 不同写法的含义
✅ build/
表示 "忽略 build 文件夹及其所有内容"
例如:
project/
build/ ← 被忽略
src/
test.py ← 不被忽略
✅ /build/
开头加了 / 表示从 仓库根目录开始匹配 ,只忽略根下的 build 目录
如果你有多个地方叫 build(比如子目录里也有),它不会影响其他路径。
例子:
/build/→ 只忽略根目录下的build目录,不影响src/build/build/→ 忽略所有路径中出现的build文件夹(包括子目录)
⚠️ 注意:一般情况下,用 build/ 就够了,除非你想特别限定在根目录。
✅ *.log
表示 忽略所有以 .log 结尾的文件 (不限于位置)
例如:
app.log
error.log
logs/my.log
都会被忽略!
✅ /log/
表示 忽略根目录下的 log 文件夹 (注意是 / 开头)
如果子目录也有 log 文件夹,不会被忽略。
✅ native_ai_robot/data
直接写文件夹名,表示忽略 nativeads_ai_robot/data 这个路径(相对路径,从根开始)
🔹 如何忽略 test.py?
只需在 .gitignore 中添加一行:
gitignore
test.py
✅ 它会忽略根目录下的 test.py。
如果你想忽略任意位置的 test.py,可以写:
gitignore
**/test.py
-
**表示任意层级的子目录(递归) -
所以
**/test.py会忽略:test.py /src/test.py /utils/test.py /a/b/c/test.py
✅ 小贴士
- 每行一个规则,空行或注释(以
#开头)会被忽略 - 规则支持通配符
*、?、[]等。 - 使用
!可以排除 某个规则(比如:!important.txt会保留这个文件)。 - 你可以用 gitignore.io 生成模板(如 Python、VSCode 等)。