我有一个带有子目录的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'
它不起作用,因为您的代码依赖于当前目录来打开日志文件。你知道吗
由于您从打开日志的文件中知道日志文件的相对路径,因此可以使用
os.path.dirname(__file__)
定位当前目录模块,然后加入其余模块:在
logger.py
中,os.path.dirname(__file__)
是'/home/abc/project/python/xyz/data'
。只需添加log
文件夹部分。你知道吗或者以更便携的方式:
从不引用具有相对路径的资源/外部文件。始终使用配置文件中的绝对路径或使用此技术来确保起始目录。千万不要用
os.chdir
来做这件事。你知道吗类似问题:Weird python file path behavior 路径行为
有趣的相关阅读:os.getcwd() vs os.path.abspath(os.path.dirname(__file__))
相关问题 更多 >
编程相关推荐