How to import a Python module with relative path to a file from another directory?
我有一个具有子目录的python项目,无法从子目录中的另一个模块(这里是EDOCX1[0])导入根目录中的模块(这里是EDOCX1[1])。
问题是
如何从
1 2 3 4 5 6 7 | ├── data/ module.py logger.py ├── composite/ │ ├── composite.py ├── log/ │ ├── info.log |
这项工作:
数据/记录器.py:
1 | h_info = RotatingFileHandler('log/info.log', [...]) |
号
数据/模块.py:
1 | import logger |
这不起作用:
数据/复合/复合.py:
1 2 3 | from data import logger FileNotFoundError: [Errno 2] No such file or directory: '/home/abc/project/python/xyz/data/composite/log/info.log' |
。
它不起作用,因为您的代码依赖于当前目录来打开日志文件。
由于您从要打开日志的文件中知道日志文件的相对路径,因此可以使用
在
1 | h_info = RotatingFileHandler(os.path.join(os.path.dirname(__file__),'log/info.log'), [...]) |
或者以更便携的方式:
1 | h_info = RotatingFileHandler(os.path.join(os.path.dirname(__file__),"log","info.log"), [...]) |
号
永远不要用相对路径引用资源/外部文件。始终使用配置文件中的绝对路径或使用此技术来确保启动目录。千万不要用
类似问题:奇怪的python文件路径行为路径行为
有趣的相关阅读:os.getcwd()vs os.path.abspath(os.path.dirname(uuu file_uuuuu))。