【Python学习之路】(1)关于PyCharm中的虚拟环境

731 阅读14分钟

起因

关键词:Python、PyCharm、虚拟环境

其实没什么背景可言,笔者看到网上很多关于PyCharm中虚拟环境的文章都是以图文形式展示的,更多都是标题党,比如:虚拟环境看这一篇就够了、终于有人把虚拟环境讲明白了,类似这种简直离大谱啊家人们,所以想以命令行的方式写一篇关于虚拟环境的文章,这也是我在稀土上写的第一篇文章,后续也会持续更新。

一. 简介

1. 什么是虚拟环境?

1.1 定义

虚拟环境是一个包含独立Python解释器和依赖库的目录,与系统的全局Python环境相隔离。每个虚拟环境可以有自己独立的Python版本和第三方包,使得在同一计算机上运行不同项目时,项目之间的依赖不会相互干扰。

1.2 目的

  • 版本隔离: 不同的项目可能需要不同版本的Python或特定版本的第三方包。虚拟环境确保每个项目都能使用其所需的特定配置,而不影响其他项目。
  • 依赖管理: 虚拟环境允许你为每个项目定义独立的依赖,确保项目的依赖关系不受其他项目的影响,避免冲突。
  • 项目独立性: 每个虚拟环境都是项目的一部分,使得项目可以在不同计算机上或共享给其他开发人员时,保持一致的环境。

2. 虚拟环境的创建和管理

2.1 创建虚拟环境

在Python中,可以使用venv(在Python 3.3及以上版本内置)或者virtualenv(一个独立的第三方包)工具来创建虚拟环境。

  • 使用 venv:

    bash
    python3 -m venv myenv
    
  • 使用 virtualenv:

    bash
    virtualenv myenv
    

2.2 激活虚拟环境

激活虚拟环境是为了在项目中使用该环境的Python解释器和依赖库。

  • 在Windows上:

    bash
    myenv\Scripts\activate
    
  • 在Unix或 MacOS上:

    bash
    source myenv/bin/activate
    

2.3 安装和管理依赖

在激活的虚拟环境中,可以使用 pip 来安装和管理项目所需的依赖库。

bash
pip install package_name

3. 虚拟环境的最佳实践

3.1 使用 requirements.txt 文件

将项目的依赖记录在一个文本文件中,通常命名为 requirements.txt。这样其他开发者或者在不同环境中重新创建虚拟环境时,只需运行 pip install -r requirements.txt 即可还原项目环境。

3.2 版本控制和虚拟环境

通常将虚拟环境目录添加到版本控制的忽略文件中,例如 .gitignore,以避免将虚拟环境文件推送到版本控制系统中。

4. 虚拟环境的优势

4.1 简化部署

通过使用虚拟环境,可以轻松地将项目的整个环境打包,并在其他系统中重新创建相同的环境。

4.2 避免全局污染

虚拟环境将项目的依赖隔离在项目文件夹中,防止对系统全局环境的污染,从而确保不同项目之间的稳定性。

4.3 更好的协作

项目依赖的清晰定义使得多人协作更加容易,所有人都可以在相同的环境中工作而无需担心版本问题。

二. PyCharm中创建虚拟环境

1. 打开PyCharm并创建新项目:

启动PyCharm并点击 "Create New Project" 或者打开现有项目。

2. 配置项目解释器:

2.1 使用系统解释器:

  • 如果你想使用系统中已安装的Python解释器,选择 "Existing interpreter"。
  • 点击 "..."
  • 选择系统中的Python解释器路径,通常在 /usr/bin/python(Linux/macOS)或者 C:\Python39\python.exe(Windows)。
  • 点击 "OK" 完成配置。

2.2 创建新的虚拟环境:

  • 如果你想为项目创建一个新的虚拟环境,选择 "New environment using"。
  • 在 "Location" 中指定虚拟环境的路径,例如项目文件夹下的 venv 文件夹。
  • 选择所需的Python解释器版本。
  • 点击 "OK" 完成配置。

3. 验证项目解释器配置:

在PyCharm的底部状态栏或者顶部菜单栏,你应该看到项目解释器的版本号。确保它是你预期的Python版本。

4. 切换虚拟环境(如果有):

如果你使用了虚拟环境,确保在PyCharm的底部状态栏或者顶部菜单栏中,显示的是你创建的虚拟环境。

四. 虚拟环境的管理

1. 查看已安装的包

1.1 使用命令行:

-   打开命令行终端。

-   激活虚拟环境:在Windows上使用 `myenv\Scripts\activate`,在Unix/MacOS上使用 `source myenv/bin/activate`。

-   运行以下命令查看已安装的包列表:

    ```
    bash
    pip list
    ```

1.2 使用PyCharm:

-   在PyCharm中打开项目。
-   打开项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
-   在解释器页面,你可以看到已安装的包列表。

2. 安装新的包

2.1 使用命令行:

-   激活虚拟环境。

-   运行以下命令安装新包,例如安装名为 `example_package` 的包:

    ```
    bash
    pip install example_package
    ```

2.2 使用PyCharm:

-   在PyCharm中打开项目。
-   打开项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
-   在解释器页面,点击右上角的 "+" 符号。
-   在弹出的对话框中搜索并选择要安装的包,然后点击 "Install Package"

3. 升级和卸载包

3.1 升级包:

-   **使用命令行:**

    ```
    bash
    pip install --upgrade package_name
    ```

-   **使用PyCharm:**

    -   在解释器页面,选择要升级的包,然后点击右侧的 "Upgrade" 按钮。

3.2 卸载包:

-   **使用命令行:**

    ```
    bash
    pip uninstall package_name
    ```

-   **使用PyCharm:**

    -   在解释器页面,选择要卸载的包,然后点击右侧的 "Uninstall" 按钮。

4. 导出和导入依赖

4.1 导出依赖(requirements.txt):

-   **使用命令行:**

    ```
    bash
    pip freeze > requirements.txt
    ```

-   **使用PyCharm:**

    -   在解释器页面,点击右下角的 "Export Requirements" 按钮,选择文件保存位置。

4.2 导入依赖(从requirements.txt安装):

-   **使用命令行:**

    ```
    bash
    pip install -r requirements.txt
    ```

-   **使用PyCharm:**

    -   在解释器页面,点击右下角的 "Install Requirements" 按钮,选择要导入的requirements.txt文件。

五. 特定项目需求的虚拟环境配置

1. 支持特定Python版本

1.1 使用 venv 创建虚拟环境:

```
bash
python3 -m venv --python=/path/to/python_version myenv
```

替换 `/path/to/python_version` 为你希望使用的特定Python版本的路径。

1.2 激活虚拟环境:

-   在Windows上:

    ```
    bash
    myenv\Scripts\activate
    ```

-   在Unix或MacOS上:

    ```
    bash
    source myenv/bin/activate
    ```

1.3 验证Python版本:

```
bash
python --version
```

确保显示的Python版本是你指定的特定版本。

2. 集成第三方库

2.1 使用命令行安装第三方库:

```
bash
pip install package_name
```

替换 `package_name` 为你需要的第三方库的名称。

2.2 使用PyCharm安装第三方库:

-   打开PyCharm项目。
-   进入项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
-   在解释器页面,点击右上角的 "+" 符号。
-   在弹出的对话框中搜索并选择要安装的包,然后点击 "Install Package"

3. 与PyCharm设置同步

3.1 在PyCharm中配置项目解释器:

-   打开PyCharm并进入项目。
-   在项目设置中配置解释器,确保选择了你希望使用的虚拟环境。

3.2 在虚拟环境中同步PyCharm设置:

-   确保虚拟环境已经激活。

-   如果你在PyCharm中添加、删除或修改了项目的解释器设置,你需要在虚拟环境中同步这些更改,可以使用以下命令:

    ```
    bash
    pip freeze > requirements.txt
    ```

    这将把PyCharm中的依赖关系导出到 `requirements.txt` 文件中。

3.3 在PyCharm中导入虚拟环境设置:

-   在解释器页面,点击右下角的 "Install Requirements" 按钮,选择 `requirements.txt` 文件。
-   这将安装虚拟环境中与PyCharm设置相匹配的所有依赖项。

六. PyCharm中的虚拟环境最佳实践

1. 使用requirements.txt文件

1.1 导出项目依赖:

-   在PyCharm中,打开项目。
-   进入项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
-   点击右下角的 "Export Requirements" 按钮。
-   选择保存的位置,例如项目根目录下的 `requirements.txt`

1.2 在新环境中安装依赖:

-   在新的开发环境或团队成员中,通过以下命令安装依赖:

    ```
    bash
    pip install -r requirements.txt
    ```

-   这将确保新环境中的依赖与原始项目相匹配。

2. 版本控制和虚拟环境

2.1 忽略虚拟环境文件:

-   在项目根目录创建一个 `.gitignore` 文件(如果你使用Git作为版本控制工具)。

-`.gitignore`中添加以下行以忽略虚拟环境文件:

    ```
    venv/
    ```

-   这确保了虚拟环境不会被版本控制。

2.2 共享requirements.txt:

-`requirements.txt`文件包含在版本控制中,以便团队成员可以轻松创建相同的开发环境。

3. 避免全局安装包的冲突

3.1 使用虚拟环境:

-   总是在项目中使用虚拟环境,而不是全局Python环境。
-   在PyCharm中确保项目的解释器是项目专用的虚拟环境。

3.2 不要全局安装包:

-   避免在全局Python环境中安装过多的包,以防止全局污染和冲突。

3.3 使用虚拟环境的优势:

-   虚拟环境提供了隔离的开发环境,确保项目的独立性。
-   可以轻松在不同项目中使用相同的包的不同版本,而不会发生冲突。

七. 调试和测试

1. 在虚拟环境中进行调试

1.1 确保虚拟环境已激活:

-   在命令行中或者PyCharm终端中,激活虚拟环境:

    ```
    bash
    # Windows
    myenv\Scripts\activate

    # Unix/MacOS
    source myenv/bin/activate
    ```

1.2 在PyCharm中配置解释器:

-   打开PyCharm项目。
-   进入项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
-   确保选择的是激活的虚拟环境。

1.3 设置调试配置:

-   打开要调试的Python文件。
-   单击文件左侧的行号,设置断点(红点)。
-   在顶部工具栏选择 "Run" -> "Debug 'your_file.py'"。

1.4 调试过程:

-   在运行过程中,程序将在断点处暂停。
-   使用调试工具栏进行单步执行、变量查看等操作。

2. 单元测试和虚拟环境

2.1 编写单元测试:

-   创建一个与项目结构相同的`tests`目录。
-   在该目录下创建测试文件,例如 `test_your_module.py`-   使用测试框架(如`unittest``pytest`)编写测试用例。

2.2 激活虚拟环境并运行测试:

-   在命令行中或者PyCharm终端中,激活虚拟环境。

-   运行测试命令,例如使用`pytest`    ```
    bash
    pytest tests/
    ```

-   确保测试用例通过。

3. 集成 PyTest 和虚拟环境

3.1 安装 PyTest:

-   在PyCharm终端或者虚拟环境下运行:

    ```
    bash
    pip install pytest
    ```

3.2 编写 PyTest 测试用例:

-`tests`目录中创建测试文件,例如 `test_your_module.py`-   使用 PyTest 的语法编写测试用例。

3.3 运行 PyTest 测试:

-   在PyCharm终端或者虚拟环境下运行:

    ```
    bash
    pytest tests/
    ```

-   查看测试结果,确保所有测试通过。

3.4 使用 PyTest 参数化:

-   PyTest支持参数化测试,可以更全面地覆盖测试场景。

-   示例代码:

    ```
    python
    import pytest

    @pytest.mark.parametrize("input, expected", [(1, 2), (2, 4), (3, 6)])
    def test_multiply_by_two(input, expected):
        result = input * 2
        assert result == expected
    ```

八. 多人协作和虚拟环境

1. 项目团队中的虚拟环境共享

1.1 使用 requirements.txt 管理依赖:

-   在项目中使用 `requirements.txt` 文件来记录项目的所有依赖项。
-   每个团队成员都可以使用相同的 `requirements.txt` 文件创建相同的虚拟环境。

1.2 将虚拟环境文件添加到版本控制:

-   将 `venv/` 目录(或虚拟环境的目录名)添加到项目的 `.gitignore` 文件中,以防止将虚拟环境文件添加到版本控制。
-   将 `requirements.txt` 文件添加到版本控制,以确保团队成员能够获取相同的依赖项。

1.3 在新环境中还原虚拟环境:

-   新团队成员或者使用新的开发环境的成员可以通过以下步骤还原虚拟环境:

    ```
    bash
    python -m venv myenv  # 创建虚拟环境
    source myenv/bin/activate  # 激活虚拟环境
    pip install -r requirements.txt  # 安装依赖
    ```

2. 避免版本问题

2.1 指定准确的依赖版本:

-   在 `requirements.txt` 文件中指定每个依赖项的准确版本,以避免不同团队成员使用不同的软件版本。

-   示例:

    ```
    package_name==1.2.3
    ```

2.2 定期更新依赖项:

-   定期检查并更新项目中的依赖项,确保使用的是最新的可用版本。

-   使用以下命令更新虚拟环境中的依赖项:

    ```
    bash
    pip install --upgrade -r requirements.txt
    ```

2.3 使用锁定文件(requirements.txtrequirements.txt.lock):

-   使用工具如 `pipenv` 或 `poetry` 可以生成锁定文件,确保每个团队成员都使用相同的软件版本。

-   示例使用 `pipenv` 生成锁定文件:

    ```
    pipenv lock
    ```

九. 常见问题和解决方案

1. 无法创建虚拟环境

1.1 检查Python安装:

-   确保你已经正确安装了Python,并且在系统路径中可以访问到。
-   如果没有安装Python,请从官方网站下载并安装最新版本的Python。

1.2 使用 venv 创建虚拟环境:

-   使用 `venv` 模块来创建虚拟环境。在命令行中执行以下命令:

    ```
    bash
    python -m venv myenv
    ```

    其中 `myenv` 是你想要创建的虚拟环境的名称。

1.3 检查权限问题:

-   在某些操作系统中,可能需要管理员权限来创建虚拟环境。确保你有足够的权限来执行此操作。

2. 包依赖冲突

2.1 使用 requirements.txt 管理依赖:

-   将项目的所有依赖项记录在 `requirements.txt` 文件中,并确保每个依赖项的版本都有明确指定。
-   当出现依赖冲突时,首先检查是否有多个版本的相同包被安装。

2.2 解决冲突:

-   手动卸载冲突的包版本:

    ```
    bash
    pip uninstall package_name
    ```

-   或者更新依赖项以解决冲突:

    ```
    bash
    pip install --upgrade package_name
    ```

2.3 使用虚拟环境隔离依赖:

-   使用虚拟环境可以避免全局依赖冲突的问题。确保在项目中使用虚拟环境来隔离依赖。

3. 迁移虚拟环境到新环境

3.1 创建新环境:

-   在新环境中创建一个新的虚拟环境,可以使用相同的命令:

    ```
    bash
    python -m venv new_env
    ```

3.2 复制旧环境中的依赖项:

-   激活旧环境,运行以下命令导出依赖项到 `requirements.txt` 文件中:

    ```
    bash
    pip freeze > requirements.txt
    ```

3.3 在新环境中安装依赖:

-   激活新环境,然后使用以下命令安装依赖项:

    ```
    bash
    pip install -r requirements.txt
    ```

3.4 验证环境:

-   确保新环境中安装的依赖项与旧环境相同,以确保项目的一致性。

十. 总结

1. 总结虚拟环境的重要性

虚拟环境在Python开发中扮演着至关重要的角色,它们提供了一个隔离的开发环境,使得不同项目之间的依赖关系得以管理,同时还可以避免全局依赖冲突的问题。以下是虚拟环境的重要性总结:

  • 隔离性: 虚拟环境将每个项目的依赖项隔离开来,确保它们不会相互干扰,从而使得项目的开发环境更加稳定和可靠。
  • 版本管理: 通过虚拟环境,可以轻松管理每个项目所需的特定软件包版本,避免由于依赖项版本不一致而导致的问题。
  • 灵活性: 虚拟环境允许开发人员在不同的项目中使用不同版本的Python解释器和软件包,从而提供了更大的灵活性和自由度。
  • 团队协作: 使用虚拟环境可以确保团队成员之间的开发环境一致,从而促进团队协作和项目的顺利进行。

2. PyCharm中创建和管理虚拟环境的实际应用

在PyCharm中,创建和管理虚拟环境非常简单,以下是实际应用步骤:

  1. 创建虚拟环境:

    • 在PyCharm中打开项目。
    • 进入项目设置:File -> Settings -> Project: your_project_name -> Python Interpreter。
    • 点击右上角的齿轮图标,选择 "Add..."。
    • 选择 "Virtualenv Environment",然后点击 "OK"。
    • 配置虚拟环境的位置和Python解释器版本,然后点击 "OK"。
  2. 管理虚拟环境:

    • 在项目设置中,可以查看和切换当前项目使用的虚拟环境。
    • 可以添加、删除或切换不同的虚拟环境。
  3. 安装依赖项:

    • 在虚拟环境中,可以使用PyCharm的界面或者命令行来安装项目所需的依赖项。
    • PyCharm提供了便捷的界面来管理依赖项,并且可以通过 requirements.txt 文件来批量安装依赖项。

十一. 参考文献

1. PyCharm官方文档

1.1 PyCharm Documentation: www.jetbrains.com/pycharm/doc…

-   PyCharm的官方文档包含了丰富的信息,涵盖了IDE的各个方面,包括项目设置、虚拟环境管理等。

2. Python虚拟环境文档

2.1 Python Documentation - venv: docs.python.org/3/library/v…

-   官方文档中关于Python虚拟环境(`venv`模块)的详细信息,包括创建、激活、使用虚拟环境等方面的内容。

2.2 Python Packaging Authority - Pipenv: pipenv.pypa.io/en/latest/

-   Pipenv是一个用于Python项目的包管理和虚拟环境工具,该文档提供了使用Pipenv的指南和参考。

3. 相关学术和实践文章

3.1 Real Python - Python Virtual Environments: A Primer: realpython.com/python-virt…

-   Real Python网站上的文章,介绍了Python虚拟环境的基础知识和最佳实践。

3.2 Towards Data Science - The Definitive Guide to Python Virtual Environments: towardsdatascience.com/a-dead-simp…

十二. 声明

感谢阅读,以上内容为本人原创文章,引用相关学术和实践文章已标明出处。