Python项目中创建虚拟环境指南:如何确保打包时排除不必要的包

在 Python 项目中创建虚拟环境,并确保在打包时不带上不必要的包,可以按照以下步骤进行:

1. 创建虚拟环境(如果尚未创建)

首先,确保你已经安装了 Python,并且版本是 3.3 以上,因为 venv 模块从 Python 3.3 开始就内置在 Python 中。

在项目目录下,打开终端/命令行,运行以下命令:

python -m venv venv

这将在项目目录下创建一个名为 venv 的虚拟环境文件夹。你可以根据自己的需要更改文件夹名称。

2. 激活虚拟环境

激活虚拟环境后,所有通过 pip 安装的软件包将只会安装在该虚拟环境内,而不会影响系统的全局 Python 环境。

  • Windows:

  • .\venv\Scripts\activate
    

    macOS/Linux:

    source venv/bin/activate
    

    激活后,命令行提示符通常会变化,显示虚拟环境的名称,比如 (venv)

    附问题1:.\venv\Scripts\activate在哪里输入来激活虚拟环境?

    要在 Windows 上激活 Python 虚拟环境,应该在 命令提示符(Command Prompt)PowerShell 中输入 .\venv\Scripts\activate

    下面是详细步骤:

    1. 打开命令提示符(Command Prompt)或 PowerShell

    2. 按 Windows + R 打开 "运行" 窗口,输入 cmd 然后按回车键,打开 命令提示符
    3. 或者按 Windows + X 并选择 Windows PowerShell 或 PowerShell(管理员) 来打开 PowerShell
    4. 导航到你的项目目录: 使用 cd 命令导航到你的 Python 项目的文件夹。例如:

      cd path\to\your\project
      

      其中 path\to\your\project 是你的项目所在的文件夹路径。

    5. 激活虚拟环境: 进入到项目文件夹后,输入以下命令来激活虚拟环境

    .\venv\Scripts\activate
    

     其中,venv 是你创建的虚拟环境的文件夹。如果你将虚拟环境命名为其他名字,则替换 venv 为你使用的名称。

       4. 激活成功后: 激活后,你应该看到命令提示符变成类似以下的格式,表示你已进入虚拟环境:

    (venv) C:\path\to\your\project>
    

    这里的 (venv) 表示虚拟环境已经被激活

     

    附问题2:激活虚拟环境时报错cannot be loaded because running scripts is disabled on this system.

    在 PowerShell 中遇到错误 cannot be loaded because running scripts is disabled on this system 是由于 PowerShell 默认的执行策略禁止运行脚本。你可以通过更改执行策略来解决这个问题。

    解决方法:

    1. 以管理员身份打开 PowerShell

    2. 按 Windows + X,然后选择 Windows PowerShell (管理员),或者搜索 PowerShell,右键点击并选择 以管理员身份运行
    3. 更改执行策略: 在管理员模式下的 PowerShell 中,输入以下命令来允许本地脚本的运行:

      Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

      这个命令的意思是:允许本地脚本运行,并且只允许来自互联网的脚本(如通过网络下载的脚本)需要签名。

    4. 确认更改: 输入命令后,会提示你确认更改,输入 Y 然后按回车。

    5. 重新激活虚拟环境: 现在,你可以重新尝试激活虚拟环境。返回到你的项目目录,然后再次输入:

      .\venv\Scripts\activate

    解释:

  • RemoteSigned 执行策略:允许你运行本地创建的脚本,而对于从互联网下载的脚本,要求它们有有效的签名。
  • CurrentUser 作用范围:仅对当前用户有效,不会影响其他用户的执行策略。
  • 通过这种方式,你应该能够成功解决该错误并激活虚拟环境。如果以后不再需要执行策略更改,可以将执行策略恢复到默认状态:

    Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUser

    但通常情况下,RemoteSigned 是一个比较安全的设置。

    3. 安装依赖包

    在虚拟环境中,你可以使用 pip 来安装项目的依赖包,这会将软件包安装到虚拟环境中,而不是全局 Python 环境:

    pip install package_name
    

    你还可以一次性安装多个包,比如:

    pip install numpy pandas requests
    

    安装完所需的依赖后,可以通过以下命令查看已安装的包:

    pip freeze
    pip list
    

    4. 生成 requirements.txt 文件

    为了确保项目在其他地方或其他虚拟环境中能够安装相同的依赖包,生成 requirements.txt 文件。运行:

    pip freeze > requirements.txt
    

    这会将当前虚拟环境中安装的所有包及其版本写入 requirements.txt 文件。

    5. 在打包时不带多余的包

    为了确保打包时不包含不必要的包,可以使用以下策略:

    使用 pip 安装依赖时,尽量确保只安装项目所需的包。
  • 手动安装依赖包: 在 requirements.txt 文件中列出明确的依赖包,并避免安装不必要的包。
  • 使用 pip-tools 工具进行精确依赖管理

    pip-tools 是一个很有用的工具,可以帮助你管理项目的依赖关系,并确保生成的 requirements.txt 文件只包含必要的包。

    安装 pip-tools

    pip install pip-tools
    

    然后使用以下命令生成一个干净的 requirements.txt 文件:

    pip-compile --output-file=requirements.txt
    

    它会从 requirements.in 文件中生成一个 requirements.txt,并只列出实际需要的包。

    6. 生成包时排除不必要的包

    如果你需要打包项目,并确保只包含必要的包,可以通过 setup.pyMANIFEST.in 文件来控制。

    在项目根目录创建 setup.py 文件,包含类似以下内容:

    from setuptools import setup, find_packages
    
    setup(
        name='your_project_name',
        version='0.1',
        packages=find_packages(),
        install_requires=[
            # 列出项目依赖的包
            'package1',
            'package2',
        ],
    )
    

    如果你使用 setuptools 来打包项目,可以通过创建 MANIFEST.in 文件来指定哪些文件需要包含在打包文件中。例如:

    include README.md
    include requirements.txt
    

    7. 使用 pipenv(可选)

    pipenv 是一个更高级的工具,它结合了 virtualenvpip,用于创建和管理虚拟环境及依赖包。

    安装 pipenv

    pip install pipenv
    

    使用 pipenv 创建虚拟环境并安装依赖:

    pipenv install package_name
    

    pipenv 会自动为你创建虚拟环境,并生成一个 PipfilePipfile.lock 文件,后者可以帮助确保安装时的依赖版本一致。

    总结

  • 使用虚拟环境来隔离项目依赖,避免全局安装包污染。
  • 创建 requirements.txt 文件来管理项目依赖。
  • 可以使用 pip-tools 来精确管理依赖。
  • 确保在 setup.py 中列出必要的包,并通过 MANIFEST.in 过滤不需要的文件。
  • 使用 pipenv 来简化虚拟环境和依赖管理。
  • 这些方法能帮助你更好地管理项目依赖,打包时不带多余的包

    作者:whale fall

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python项目中创建虚拟环境指南:如何确保打包时排除不必要的包

    发表回复