Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从父目录中的python文件导入常量_Python_Python 3.x - Fatal编程技术网

从父目录中的python文件导入常量

从父目录中的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中导入它。到目前为止没有成功 编辑:我在脚本

我想在顶级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。但我不想在每一个脚本中反复执行,所以我一直在寻找一种方法,在我的存储库中使用常量执行一次

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
    目录中,您可能已经从该目录中导入了内容?