Python连接云端Linux服务器进行远程 (后端开发/深度学习)时候的注意事项

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 创建的环境 vs conda 创建的环境有什么区别?——❤️)
      • [✅ 问题 2:Anaconda 和 Miniconda 有什么区别?](#✅ 问题 2:Anaconda 和 Miniconda 有什么区别?)
    • 五、一句话总结
      • [一般搭配使用 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)
      • [🧩 二、使用场景详解](#🧩 二、使用场景详解)
        • [✅ `which` 的典型用途:](#✅ which 的典型用途:)
        • [✅ `whereis` 的典型用途:](#✅ whereis 的典型用途:)
      • [🧠 三、深入理解:为什么 `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))
    • [🔐 三、使用虚拟环境(必须操作!)------❤️](#🔐 三、使用虚拟环境(必须操作!)——❤️)
    • [四、💡 小技巧:常用命令汇总](#四、💡 小技巧:常用命令汇总)
    • 五、不小心安装到了全局怎么办呢------❤️
    • 六、特殊的requirements.txt
      • [❓ 可以正常安装吗?](#❓ 可以正常安装吗?)
        • [✅ 答案:✅ **可以!**](#✅ 答案:✅ 可以!)
        • [🔍 原因解释](#🔍 原因解释)
        • [⚠️ 注意:](#⚠️ 注意:)
      • [❓为什么最后要写 `-e .`?这样有什么好处?------❤️](#❓为什么最后要写 -e .?这样有什么好处?——❤️)
        • [🎯 答案:`-e .` 的作用是 ------ **"可编辑模式安装"**](#🎯 答案:-e . 的作用是 —— “可编辑模式安装”)
        • [💡 什么是"可编辑模式"(editable install)?](#💡 什么是“可编辑模式”(editable install)?)
        • [🌟 好处如下:](#🌟 好处如下:)
        • [⚠️ 注意事项](#⚠️ 注意事项)
      • [==✅ 如何编写 `setup.py`?(配合 `-e .` 使用)==](#==✅ 如何编写 setup.py?(配合 -e . 使用)==)
      • [✅ 总结](#✅ 总结)
    • [七、🔁 进阶做法:分离配置和安装逻辑](#七、🔁 进阶做法:分离配置和安装逻辑)
      • [✅ `requirements.txt`(生产环境)](#✅ requirements.txt(生产环境))
      • [✅ `requirements-dev.txt`(开发环境)](#✅ requirements-dev.txt(开发环境))
      • [🧪 最终测试](#🧪 最终测试)
  • .gitingore的书写
    • [🔹 什么是 `.gitignore`?](#🔹 什么是 .gitignore?)
    • [🔹 不同写法的含义](#🔹 不同写法的含义)
      • [✅ `build/`](#✅ build/)
      • [✅ `/build/`](#✅ /build/)
      • [✅ `*.log`](#✅ *.log)
      • [✅ `/log/`](#✅ /log/)
      • [✅ `native_ai_robot/data`](#✅ native_ai_robot/data)
    • [🔹 如何忽略 `test.py`?](#🔹 如何忽略 test.py?)
    • [✅ 小贴士](#✅ 小贴士)

Python 环境管理工具总览

一、定义与区别

注意:pyenv 只是管理python版本,不提供虚拟环境,需配合 venvvirtualenv
pyenv 管理 Python 版本,pip 管理包,conda` 既管环境又管包

工具名称 类型 是否自带 主要功能 说明
pip 包管理器 ✅ 是 安装/卸载 Python 第三方包 只管"包",不管理 Python 版本或环境
pyenv Python 版本管理器 ❌ 否 切换不同版本的 Python 解释器(如 3.8, 3.9) 不管包、不创建虚拟环境
venv 虚拟环境工具 ✅ 是 创建隔离的 Python 环境(包含 pip) 针对当前 Python 版本创建环境
virtualenv 虚拟环境工具 ❌ 否 创建隔离的 Python 环境 venv前身,功能类似
pipenv 包+环境管理工具 ❌ 否 自动管理虚拟环境 + 依赖包(Pipfile 结合了 pipvirtualenv
poetry 包+环境管理工具 ❌ 否 完整项目管理(依赖、构建、发布等) 更现代化,适合复杂项目
conda 环境+包管理器 ❌ 否 创建环境 + 安装包(支持非 Python 包) 常用于数据科学领域

二、详细解释每个工具的作用

1. pip ------ Python 包管理器

  • 作用 :安装、卸载、升级 Python 包(如 requests, numpy

  • 是否自带? ✅ 是(所有 Python 安装都带)

  • 例子

    bash 复制代码
    pip 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 版本,不创建环境。
    • 通常和 venvvirtualenv 配合使用。

⚠️ 没有 pyenv,你就无法轻松切换 Python 版本。


3. venv / virtualenv / pipenv / poetry ------ 虚拟环境工具

🟩 venv (Python 3.3+ 内置)
  • 作用 :创建一个独立的 Python 环境(包含自己的 pipsite-packages

  • 是否自带? ✅ 是(Python 3.3+ 内置)

  • 例子

    bash 复制代码
    python -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)

  • 需要单独安装:

    bash 复制代码
    pip install virtualenv
    virtualenv venv  // 以后都用venv,不要myenv,因为venv默认不被git了

💡 推荐使用 venv,因为它是标准库的一部分。

🟥 pipenv
  • 作用 :结合 virtualenv + pip,自动创建环境,并用 Pipfile 管理依赖

  • 是否自带? ❌ 否

  • 优点

    • 自动生成 PipfilePipfile.lock
    • 一键安装所有依赖
    • 支持开发/生产环境分离
  • 例子

    bash 复制代码
    pipenv install requests
    pipenv shell  # 进入环境
🟦 poetry
  • 作用:现代项目管理工具,支持包管理 + 构建 + 发布

  • 是否自带? ❌ 否

  • 优点

    • 使用 pyproject.toml 文件(比 setup.py 更简洁)
    • 支持依赖解析、锁文件、打包、发布到 PyPI
    • 更适合大型项目或开源项目
  • 例子

    bash 复制代码
    poetry init   #  初始化一个新的 Poetry 项目,创建 pyproject.toml 配置文件
    poetry add requests  # 安装最新版 requests 包
    poetry shell   # 进入虚拟环境,如果虚拟环境不存在会自动创建

✅ 总结:

  • venvvirtualenv:只做"隔离环境"
  • pipenvpoetry:同时做"环境管理 + 包管理"

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 项目 → 用 venvpipenv 就够了
    • miniconda + conda + pip(数据科学)
    • 优先用 conda install xxx,如果找不到再用 pip install xxx
  • 如果你要训练深度学习模型,要用 tensorflow + cuDNNconda 更合适
    • 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 项目 → 用 venvpipenv 就够了。
  • 如果你要训练深度学习模型,要用 tensorflow + cuDNNconda 更合适。

一般搭配使用 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 的典型用途:
  1. 检查某个命令是否可用:

    bash 复制代码
    $ which ls
    /bin/ls

    → 如果返回路径,则说明 ls 存在;否则不存在。

  2. 查看当前使用的命令版本(比如区分 python 是哪个解释器):

    bash 复制代码
    $ which python
    /home/user/.pyenv/shims/python

    → 显示你当前激活的 Python 是通过 pyenv 安装的。

  3. 判断是否有冲突的命令(多个同名命令):

    bash 复制代码
    $ which python
    /usr/bin/python
    /home/user/.local/bin/python

⚠️ 注意:which 是 shell 内建命令(type 更准确),但大多数情况够用。


whereis 的典型用途:
  1. 查找一个命令的完整信息(尤其是开发人员):

    bash 复制代码
    $ whereis gcc
    gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz

    → 可以看到编译器、库文件和手册页。

  2. 检查是否安装了某个软件包的完整组件(源码 + 手册):

    bash 复制代码
    $ whereis mysql
    mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

🧠 三、深入理解:为什么 whereis 不总是可靠?

虽然 whereis 很方便,但它有几个限制:

  1. 只在预设路径下搜索 (通常为 /bin, /usr/bin, /usr/local/bin 等)。

    → 如果你把程序放在非标准路径(如 /opt/myapp),whereis 就找不到它。

  2. 不会检查是否在 $PATH

    → 即使你安装了 python,但如果没加到 $PATHwhich 找不到,而 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

    bash 复制代码
    source venv/bin/activate
  • Windows (CMD)

    cmd 复制代码
    venv\Scripts\activate
  • Windows (PowerShell)

    powershell 复制代码
    venv\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

它会:

  1. 使用 http://pip.baidu.com/... 作为下载源
  2. 忽略 SSL 校验(因为 --trusted-host
  3. 安装当前目录(.)中的项目为"可编辑"状态

❓为什么最后要写 -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

✅ 小贴士

  1. 每行一个规则,空行或注释(以 # 开头)会被忽略
  2. 规则支持通配符 *?[] 等。
  3. 使用 ! 可以排除 某个规则(比如:!important.txt 会保留这个文件)。
  4. 你可以用 gitignore.io 生成模板(如 Python、VSCode 等)。

相关推荐
肖永威1 小时前
VSCode调试Python命令行输入参数程序argparse模块实践
vscode·python
咖啡の猫1 小时前
Python顺序结构
java·前端·python
key061 小时前
从数据安全体系逆推数据自由度的权力本质
java·开发语言
C++ 老炮儿的技术栈1 小时前
用密码学安全随机数生成256位密钥
c语言·开发语言·c++·windows·安全·密码学·visual studio
z***43841 小时前
java与mysql连接 使用mysql-connector-java连接msql
java·开发语言·mysql
道路与代码之旅1 小时前
“变量也能是函数?——论 Kotlin 中那些会说话的变量,以及它们如何让代码少说废话”
android·开发语言·kotlin
xxxxxmy1 小时前
相向双指针—三数之和
python·算法·相向双指针
Blossom.1181 小时前
基于知识图谱+LLM的工业设备故障诊断:从SQL日志到可解释推理的实战闭环
人工智能·python·sql·深度学习·算法·transformer·知识图谱
白露与泡影1 小时前
大厂Java面试前复习的正确姿势(800+面试题附答案解析)
java·开发语言·面试