从父目录中的python文件导入常量
我想在顶级python文件settings.py中定义诸如BASE_DIR之类的常量,并从我的项目中的“all”文件中访问这些常量,例如从import_scripts/import_users.py和export_scripts/export_users.py(独立助手脚本) 我尝试了很多不同的方法,比如从import\u users.py导入settings.py relative,然后在import\u scripts/\uu init\uu py中导入它。到目前为止没有成功 编辑:我在脚本中添加了父文件夹,例如将import_users.py添加到sys.path。但我不想在每一个脚本中反复执行,所以我一直在寻找一种方法,在我的存储库中使用常量执行一次从父目录中的python文件导入常量,python,python-3.x,Python,Python 3.x,我想在顶级python文件settings.py中定义诸如BASE_DIR之类的常量,并从我的项目中的“all”文件中访问这些常量,例如从import_scripts/import_users.py和export_scripts/export_users.py(独立助手脚本) 我尝试了很多不同的方法,比如从import\u users.py导入settings.py relative,然后在import\u scripts/\uu init\uu py中导入它。到目前为止没有成功 编辑:我在脚本
my_app
├── import_scripts
│ ├── import_users.py
├── export_scripts
│ ├── export_users.py
├── lib
│ ├── csv_reader.py
└── settings.py
importlib.util方法对我不起作用-我尝试导入的常量文件没有设置为模块(no _uinit _;.py等)。我也不想在sys.path中添加任何内容,因为我要导入的文件只包含特定机器学习运行的设置。也许不是很优雅,但我做的是:
import os
cur_working_dir = os.getcwd()
run_settings_path = 'output/run_data/1'
path_to_settings_file = os.path.join(cur_working_dir,run_settings_path)
os.chdir(path_to_settings_file)
from settings_file import *
os.chdir(cur_working_dir)
importlib.util方法对我不起作用-我尝试导入的常量文件没有设置为模块(no _uinit _;.py等)。我也不想在sys.path中添加任何内容,因为我要导入的文件只包含特定机器学习运行的设置。也许不是很优雅,但我做的是:
import os
cur_working_dir = os.getcwd()
run_settings_path = 'output/run_data/1'
path_to_settings_file = os.path.join(cur_working_dir,run_settings_path)
os.chdir(path_to_settings_file)
from settings_file import *
os.chdir(cur_working_dir)
使用软件包。您可以通过
import.pkg\u name
在父目录中导入包。相对导入在包中是相对的。只要整个树不是一个包,您就需要将另一个目录(在本例中是父目录)添加到sys.path
或通过其他方式操纵解释器在何处搜索模块。我添加了父文件夹,例如将import_users.py添加到sys.path。但我不想在每一个脚本中反复执行,所以我一直在寻找一种方法,在我的存储库中执行一次。您应该导入它。因此,不要使用import语句,而是使用特殊函数,而不是:smth,比如为什么不将settings.py
放在lib
目录中,您可能已经从该目录中导入了内容?请使用软件包。您可以通过import.pkg\u name
在父目录中导入包。相对导入在包中是相对的。只要整个树不是一个包,您就需要将另一个目录(在本例中是父目录)添加到sys.path
或通过其他方式操纵解释器在何处搜索模块。我添加了父文件夹,例如将import_users.py添加到sys.path。但我不想在每一个脚本中反复执行,所以我一直在寻找一种方法,在我的存储库中执行一次。您应该导入它。所以不要使用import语句,而是使用特殊函数来代替:smth,比如为什么不将settings.py
放在lib
目录中,您可能已经从该目录中导入了内容?