跳转至

1.Python配置和虚拟环境

 本是一篇闲言碎语
 记一次由拯救爆红C盘引发的,对Python配置和虚拟环境的折腾
  • git
  • npm

npm(Node Package Manager)是 Node.js 的默认包管理工具,用于管理 JavaScript 项目的依赖、脚本和工具链。
- GithubDesktop
- python

全局PIP_TARGET

虽然将Python安装到了D盘

但pip安装包的位置,仍旧在C盘用户目录下

不知道是不是因为,运行pip安装命令时所在目录是C盘用户目录

在powershell中使用where.exe python而非where python

我通过创建pip.ini设置了路径

路径:
C:\Users\<用户名>\AppData\Roaming\pip\pip.ini
%userprofile%\AppData\Roaming\pip\pip.ini

内容:

[global]

user = false

target = D:\Python\site-packages

虚拟环境

  • 创建虚拟环境
    python -m venv myenv

  • 激活虚拟环境:myenv\Scripts\activate

  • myenv\Scripts\Activate.ps1中添加以下内容:

放到签名块(# SIG # Begin signature block)之前

# 设置包安装路径
$env:PIP_TARGET = "D:\path\to\your\repo\myenv\Lib\site-packages"
$env:PYTHONPATH = "$env:PYTHONPATH;D:\path\to\your\repo\myenv\Lib\site-packages"

激活虚拟环境后,检查变量是否生效:
echo $env:PIP_TARGET
echo $env:PYTHONPATH

  • 关闭虚拟环境:deactivate
  • 备份依赖列表:pip freeze > requirements.txt
  • 根据 requirements.txt 安装依赖:pip install -r requirements.txt

python -m pip install -r requirements.txt

设置了PYTHONPATH,导致虚拟环境受其影响

在虚拟环境中运行pip

包仍旧安装到全局环境

使用Python内置命令(如venv)创建虚拟环境时,默认情况下会继承以下全局环境的内容:

  • Python解释器副本

虚拟环境会复制全局环境的Python解释器二进制文件到其bin(或Scripts)目录中,但该文件是系统解释器的符号链接或副本,而非独立安装。

  • 标准库引用

虚拟环境不会复制标准库(如ossys等),而是通过配置文件pyvenv.cfg直接引用全局Python的标准库路径。

  • 基础工具

虚拟环境默认包含pipsetuptools等基础工具,但这些工具是独立安装的,与全局环境的版本无关

一些路径查询:

  • 获取虚拟环境中Python解释器的绝对路径:

python -c "import os, sys; print(os.path.dirname(sys.executable))"

  • 标准库路径:python -c "import os; print(os.__file__)"

  • 第三方包路径:python -c "import sys; print(sys.path)"

  • PythonPath:

python -c "import os, sys; print(os.path.dirname(sys.executable))"

设置虚拟环境包安装路径

方法1

myenv\Scripts\Activate.ps1中添加以下内容:

放到签名块(# SIG # Begin signature block)之前

# 设置包安装路径
$env:PIP_TARGET = "D:\path\to\your\repo\myenv\Lib\site-packages"
$env:PYTHONPATH = "$env:PYTHONPATH;D:\path\to\your\repo\myenv\Lib\site-packages"

激活虚拟环境后,检查变量是否生效:
echo $env:PIP_TARGET
echo $env:PYTHONPATH

方法2

修改Python虚拟环境的 sys.path(模块搜索路径):

myenv\Lib\site-packages 中新建 .pth 文件

                                                                                                              2025.2