问题描述
首先,目录。
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__
。