问题描述
首先,目录。
file1.py
|
| --__init__.py
file2.py
some_package
|
| --__init__.py
config.py
settings.ini
other_package
|
| --__init__.py
access.py
现在,在config.py ,有一个函数readfromsetting() ,该函数读取settings.ini并返回其中的内容。
在access.py ,我导入了config.py (不,这不是您想的那样, access.py成功导入了config.py ),并尝试调用readfromsetting()函数,但是Python引发了错误。
No such file or directory, "settings.ini"
所以,我的问题是,如何使用config.py从access.py读取settings.ini的内容?
我的config.py :
def readfromsetting():
with open('settings.py', 'r') as file:
return file.read()
我的access.py
from some_package import config
def get_setting():
return config.readfromsetting()
1楼
当您import <some script> python会查看sys.path的内容以导入python脚本。
但是,当您使用open()或其他方法读取文件并提供相对路径时,Python会尝试将路径解析为相对于当前工作目录的相对路径,它将不会在脚本所在的目录内查找(除非是工作目录)。
您不应依赖相对路径,而应尽可能尝试提供绝对路径。
在您的情况下,如果您确定目录结构不会更改(即settings.ini始终位于config.py或settings.py存在的目录中),则可以使用__file__变量访问以下文件的路径文件,然后使用该文件创建您settings.ini绝对路径。
范例-
import os.path
dirpath = os.path.abspath(os.path.dirname(__file__))
settings_file = os.path.join(dirpath,'settings.ini')
2楼
您的问题在这里:
def readfromsetting():
with open('settings.ini', 'r') as file:
return file.read()
“ settings.ini”是相对路径。 如果您要查找的文件位于同一目录中,则此方法非常理想。 由于您是从access.py调用此方法的,而access.py不在此目录中,因此无法找到settings.ini文件。
我建议您在打开方法中改用settings.ini文件的绝对路径。
如果确定只从access.py内调用此方法,则也可以像其他答案中提到的那样编辑__file__ 。