虚拟环境下跨子目录正确导入Python模块的方法(非sys.path方式)
解决Python跨目录模块导入问题的步骤
虚拟环境本身用于隔离项目依赖,要解决你的导入报错,需将D_365目录转为可安装的Python包,结合虚拟环境实现无硬编码路径的模块导入,具体操作如下:
1. 调整目录结构,添加包标识文件
在D_365及其子目录下创建空的__init__.py文件(标记为Python包),同时在Repository根目录添加pyproject.toml配置文件,最终结构如下:
Repository/ ├── pyproject.toml └── D_365/ ├── __init__.py ├── Code/ │ ├── __init__.py │ ├── app.py │ └── functions/ │ ├── __init__.py │ └── _00_P.py └── app_modules/ ├── __init__.py └── test.py
2. 创建并激活虚拟环境
在Repository目录下执行对应系统的命令:
- Windows(PowerShell):
python -m venv .venv .\.venv\Scripts\Activate.ps1 - Linux/macOS:
python3 -m venv .venv source .venv/bin/activate
激活后命令行前缀会出现.venv,表示虚拟环境已生效。
3. 编写pyproject.toml配置
在Repository根目录的pyproject.toml中写入以下内容,定义包的基本信息:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "D_365" version = "0.1.0" packages = ["D_365"]
4. 以可编辑模式安装包
在激活的虚拟环境中执行命令,将D_365安装到虚拟环境(可编辑模式支持代码修改后即时生效):
pip install -e .
5. 修改test.py的导入语句
替换原来的相对导入,使用绝对导入即可正常导入模块:
from D_365.Code.functions import _00_P
内容的提问来源于stack exchange,提问作者samronaldo309
相关产品推荐
相关产品推荐

