如何从另一个目录中导入一个具有相对路径的Python模块?

2024-05-16 21:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有子目录的Python项目,无法从子目录中的另一个模块导入根目录中的模块,这里是logger.py,这里是composite.py。你知道吗

问题是logger.py指向log目录中具有相对路径名的日志文件,因此composite.py无法从其子目录中找到此文件。你知道吗

如何从composite.py和根目录中的另一个模块(如module.py)导入模块logger?你知道吗

├── data/
    module.py
    logger.py
    ├── composite/
    │   ├── composite.py
    ├── log/
    │   ├── info.log

此工作:

数据/记录器.py地址:

h_info =      RotatingFileHandler('log/info.log', [...])

数据/模块.py地址:

import logger

这不起作用:

数据/合成/复合.py地址:

from data import logger

FileNotFoundError: [Errno 2] No such file or directory: '/home/abc/project/python/xyz/data/composite/log/info.log'

Tags: 模块文件数据项目pyimportinfolog
1条回答
网友
1楼 · 发布于 2024-05-16 21:32:46

它不起作用,因为您的代码依赖于当前目录来打开日志文件。你知道吗

由于您从打开日志的文件中知道日志文件的相对路径,因此可以使用os.path.dirname(__file__)定位当前目录模块,然后加入其余模块:

logger.py中,os.path.dirname(__file__)'/home/abc/project/python/xyz/data'。只需添加log文件夹部分。你知道吗

h_info = RotatingFileHandler(os.path.join(os.path.dirname(__file__),'log/info.log'), [...])

或者以更便携的方式:

h_info = RotatingFileHandler(os.path.join(os.path.dirname(__file__),"log","info.log"), [...])

从不引用具有相对路径的资源/外部文件。始终使用配置文件中的绝对路径或使用此技术来确保起始目录。千万不要用os.chdir来做这件事。你知道吗

类似问题:Weird python file path behavior 路径行为

有趣的相关阅读:os.getcwd() vs os.path.abspath(os.path.dirname(__file__))

相关问题 更多 >