如何从另一个目录导入具有文件相对路径的Python模块?
我有一个带有子目录的Python项目,无法从子目录中的另一个模块导入根目录中的模块,这里是如何从另一个目录导入具有文件相对路径的Python模块?,python,Python,我有一个带有子目录的Python项目,无法从子目录中的另一个模块导入根目录中的模块,这里是logger.py,这里是composite.py 问题是logger.py指向log目录中的日志文件,该文件具有相对路径名,因此composite.py无法从其子目录中找到此文件 如何从composite.py和根目录中的另一个模块(如module.py)导入模块logger ├── data/ module.py logger.py ├── composite/ │
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
这项工作:
data/logger.py:
h_info = RotatingFileHandler('log/info.log', [...])
数据/模块.py:
import logger
这不起作用:
data/composite/composite.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(\uuu file\uu)
找到当前目录模块,然后加入其余模块:
在logger.py
中,os.path.dirname(\uuuuu file\uuuuuu)
是'/home/abc/project/python/xyz/data'
。只需添加日志
文件夹部分
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
来执行此操作
类似问题:
路径行为
有趣的相关阅读:它不起作用,因为您的代码依赖于当前目录来打开日志文件 由于您从打开日志的文件中知道日志文件的相对路径,因此可以使用
os.path.dirname(\uuu file\uu)
找到当前目录模块,然后加入其余模块:
在logger.py
中,os.path.dirname(\uuuuu file\uuuuuu)
是'/home/abc/project/python/xyz/data'
。只需添加日志
文件夹部分
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
来执行此操作
类似问题:
路径行为
有趣的相关阅读:你有没有尝试过
h\u info=RotatingFileHandler(os.path.join(os.path.dirname(\uu文件)、'log/info.log'),[…])
可能重复的@Vil no,它不是重复的。这个问题很经典,但很难标记为重复,因为OP文件的结构千变万化,您使用的是哪种python版本?@AmirMohsen我使用的是python 3.6您是否尝试过h_info=RotatingFileHandler(os.path.join(os.path.dirname(uu文件),'log/info.log'),[…])
可能重复@Vil no,这不是这个的复制品。这个问题很经典,但很难标记为重复,因为OP文件的结构千变万化,您使用的是哪种python版本?@AmirMohsen我使用的是python 3.6谢谢,它工作得很好,但我需要将log/info.log
而不是。/log/info.log
加入模块路径,如os.path.join(os.path.dirname(uu file_uu),'log/info.log')
嗯,我在这里也学到了一些新东西。我通常使用os.getcwd()
。这里有一个关于哪个更好用的简介。谢谢,它工作得很好,但我需要将log/info.log
加入模块路径,而不是。/log/info.log
,就像在os.path.join中一样(os.path.dirname(uuu file_uuu),'log/info.log')
嗯,我在这里也学到了一些新东西。我通常使用os.getcwd()
。下面是一个关于哪个更好用的简介。