Python环境配置:如何导入引用同目录文件的模块(无需修改代码)
Python模块跨目录导入问题解决
目录结构
/ ├── package │ ├── __init__.py │ ├── mod1.py │ └── mod2.py
模块内容
mod1.py
class MyClass(object): pass
mod2.py
from mod1 import MyClass
问题场景
在package/目录内运行Python时,可正常导入任意模块:
[package/] $ python >>> import mod1 >>> import mod2 >>>
但在根目录/下导入mod2时会触发报错:
[/] $ python >>> from package import mod1 >>> from package import mod2 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/package/mod2.py", line 1, in <module> from mod1 import MyClass ModuleNotFoundError: No module named 'mod1' >>>
问题原因
当从根目录导入package.mod2时,Python的模块搜索路径(sys.path)默认包含根目录,但不包含package目录。mod2.py中使用的from mod1 import属于顶级绝对导入,Python会在sys.path的目录中查找mod1,而非package目录下的同目录模块,因此找不到目标文件。
解决方案(无需修改第三方代码)
方法1:临时配置PYTHONPATH环境变量
将package目录添加到Python的模块搜索路径中,在根目录执行对应系统的命令:
# Linux/macOS export PYTHONPATH=$(pwd)/package:$PYTHONPATH # Windows(PowerShell) $env:PYTHONPATH = "$(Get-Location)\package;$env:PYTHONPATH"
配置完成后再运行Python,即可正常导入package.mod2。
方法2:通过启动脚本注入搜索路径
在根目录创建run.py脚本,手动将package目录加入sys.path:
import sys import os # 优先搜索package目录 sys.path.insert(0, os.path.abspath('./package')) from package import mod2 # 编写后续业务逻辑
执行python run.py即可正常运行。
方法3:以开发模式安装包
如果第三方代码符合Python包规范,可通过开发模式安装让Python全局识别该包:
- 在根目录创建
setup.py文件:
from setuptools import setup, find_packages setup( name='package', version='0.1', packages=find_packages() )
- 执行开发安装命令:
pip install -e .
安装后,无论在哪个目录运行Python,都能正常导入package.mod2。
内容的提问来源于stack exchange,提问作者ewok
相关产品推荐
相关产品推荐

