1.python 引入本地依赖
在Python项目中引入本地依赖通常指的是在项目中引入本地安装的库或者模块,以便在当前项目中使用 。
1.1. 使用sys.path
动态添加模块路径
通过修改sys.path
来让Python解释器能够找到它
import os
import syscurrent_dir = os.path.join(os.getcwd(),"packagepath")
sys.path.append(current_dir)
print(current_dir)
print(sys.path)
1.2. 修改环境变量
操作系统中设置环境变量 PYTHONPATH
,可以在启动 Python 解释器时自动加载指定目录。
#shell中设置这个环境变量
export PYTHONPATH="/path/to/my/module:$PYTHONPATH"#Windows中设置
set PYTHONPATH=%PYTHONPATH%;C:\path\to\my\module
1.3.使用虚拟环境(推荐)
使用Python的虚拟环境。这不仅可以避免依赖冲突,还可以让你的项目更加独立。
创建虚拟环境:
# 创建虚拟环境
python -m venv myenv# 激活虚拟环境(Linux/macOS)
source myenv/bin/activate# 激活虚拟环境(Windows)
myenv\Scripts\activate
在虚拟环境中安装本地库:
在虚拟环境中安装它
pip install /path/to/my/module
1.4 使用 importlib
动态导入
Python 提供了 importlib
模块用于动态导入模块。
import importlib.util
import syspackage_path = '/path/to/your/package'module_name = 'your_module'spec = importlib.util.spec_from_file_location(module_name, f"{package_path}/{module_name}.py")module = importlib.util.module_from_spec(spec)sys.modules[module_name] = modulespec.loader.exec_module(module)
2. python 离线安装依赖
我们平时直接使用 pip
从(Python Package Index) 直接安装依赖包,但是有时候因为:
-
网络环境受限: 无法直接访问外网下载依赖。
-
生产环境部署: 需要确保依赖版本一致,避免线上环境与开发环境不一致导致的兼容性问题。
-
依赖包较大: 重复下载耗时较长。
我们需要将依赖包下载到本地,然后在目标机器上进行离线安装。
源码包与二进制包
- 源码包: 本质是压缩包,常见的格式有:(.zip)、(.tar.gz)、(.tar.bz)、(.tar.z)、(.tar)
- 二进制包:省去了编译的过程,直接可解压安装,安装较快。但是不同平台变异的包不同,不通用。常见的格式有:egg(.egg)、wheel(.whl)
Wheel 的出现是为了替代 Egg,它的本质是一个zip包,Wheel 和 Egg 的主要区别:
- Wheel 有一个官方的 PEP427 来定义,而 Egg 没有 PEP 定义
- Wheel 是一种分发格式,即打包格式。而 Egg 既是一种分发格式,也是一种运行时安装的格式,并且是可以被直接 import
- Wheel 文件不会包含 .pyc 文件
- Wheel 使用和 PEP376 兼容的 .dist-info 目录,而 Egg 使用 .egg-info 目录
- Wheel 有着更丰富的命名规则。
- Wheel 是有版本的。每个 Wheel 文件都包含 wheel 规范的版本和打包的实现
- Wheel 在内部被 sysconfig path type 管理,因此转向其他格式也更容易
2.1. 依赖配置导出
pip freeze >requirements.txt
2.2 依赖包导出下载
#-d <download_dir>:指定下载目录,不指定默认当前
#--index-url <index_url>: 指定下载源,不指定则使用gloabl默认的#单个包下载
pip download <package_name> -d <download_dir> --index-url <index_url>
#多个包批量下载
pip download <package_name> -d <download_dir> --index-url <index_url> -r requirements.txt#单个下载,不指定版本下载最新的
pip download torch==1.1
#或者
pip download torch==1.1 -d ./ --index-url https://download.pytorch.org/whl/cu121#批量下载
pip download -d ./ -r requirements.txt
2.3 依赖包离线安装
#-–no-index 表示不从网络索引安装依赖包
#--find-links 依赖包安装的索引地址,
#no-index和find-links,它们是成对出现的#requirements.txt 需要安装的依赖包信息#单个安装
pip install --no-index --find-links=<download_dir> <package_name>
#多个批量安装
pip install --no-index --find-links=<download_dir> -r requirements.txt #直接单个安装
pip install torch.whl
#或者
pip install torch.tar.gz
#或者
pip install --no-index --find-links=./ torch torchvision torchaudio#批量安装
pip install --no-index --find-links=./ -r requirements.txt
3.其他包管理命令
#查看当前环境安装的所有软件包
pip list查询 pypi 上含有某名字的包
#pip search pkg查询当前环境中可升级的包
#pip list --outdated#查询一个包的详细内容
pip show pkg