如何使用任意路径将Python模块导入局部变量?

如何使用任意路径将Python模块导入局部变量?,python,Python,我正在尝试使用python文件作为配置文件。在我的实际程序中,我让用户在命令行指定配置文件 下面是我的例子: 一些\u随机命名为\u file.py: import os from datetime import timedelta PROJECT = "my project" ENABLED_FORMATS = ['xml', 'json', 'yaml'] EXPIRATION=3600 #DEBUG = True #TESTING = False LOG_FOLDER = os.pa

我正在尝试使用python文件作为配置文件。在我的实际程序中,我让用户在命令行指定配置文件

下面是我的例子:

一些\u随机命名为\u file.py

import os
from datetime import timedelta

PROJECT = "my project"
ENABLED_FORMATS = ['xml', 'json', 'yaml']
EXPIRATION=3600

#DEBUG = True
#TESTING = False

LOG_FOLDER = os.path.join(os.path.expanduser('~'), 'logs')
# parse the command line and get the path
path_to_file = '/foo/bar/baz/some_randomly_named_file.py'

# load the python file at path_to_file into local variable myconfig
# [What do I write here to accomplish this?]

# And now we have a local variable called myconfig
print(myconfig.PROJECT)
文件存储在这里:
/foo/bar/baz/some\u random\u命名为\u file.py

…然后在
myapp.py
中:

import os
from datetime import timedelta

PROJECT = "my project"
ENABLED_FORMATS = ['xml', 'json', 'yaml']
EXPIRATION=3600

#DEBUG = True
#TESTING = False

LOG_FOLDER = os.path.join(os.path.expanduser('~'), 'logs')
# parse the command line and get the path
path_to_file = '/foo/bar/baz/some_randomly_named_file.py'

# load the python file at path_to_file into local variable myconfig
# [What do I write here to accomplish this?]

# And now we have a local variable called myconfig
print(myconfig.PROJECT)
输出:

my project

尝试将您的路径添加到sys.path

例如:如果您的配置文件是myconfig.py,并且位于/foo/bar/baz下

import sys
sys.path.append("/foo/bar/baz/")
import myconfig
local_var = myconfig.PROJECT
您可以使用os.path.basename()os.path.dirname()检索用户输入的值

从用户处获取配置文件名和目录路径的示例程序 test.py

import sys
import os

file_path = sys.argv[1]
dir_name = os.path.dirname(file_path)
file_name = os.path.basename(file_path)

sys.path.append(dir_name)
print dir_name
print file_name
输出
就像提到的@sandeep。只需将源文件(config.py)添加到
sys
路径。将这个config.py文件添加到路径中时,Python将该文件(及其内容)视为普通模块。这里有更多的解释:

# Load your config.py as a module
import sys
sys.path.append("/foo/bar/baz/") # Path to config.py parent folder

import config # Import as a regular module

print(config.PROJECT)
"my project"

您可以参考。

我根据中@Redlegjed的答案找到了解决方案

这里稍作修改:

import os
import importlib.machinery

path_to_file = '/foo/bar/baz/some_randomly_named_file.py'

module_dir, module_file = os.path.split(path_to_file)
module_name, module_ext = os.path.splitext(module_file)

x = importlib.machinery.SourceFileLoader(module_name, path_to_file).load_module()

print(myconfig.PROJECT)
相关和有用文章的列表:


这不适用于此。变量“myconfig”(在我的示例中)是如何填充的?是否要将模块的所有内容导入到变量中?我认为这是不可能的。sys.path.append(“/foo/bar/baz/”)import myconfig#赋值给局部变量my_local_var=myconfig.project我对您的问题的理解是,您希望通过任意路径访问模块的内容。如果我错了,请更正。文件名和路径是随机命名的。在编译时,我不知道路径,也不知道文件名。我不能在代码中说“myconfig”。我更新了问题以反映文件是用户定义/随机命名的文件名和路径是随机命名的。在编译时,我不知道路径,也不知道文件名。我不能在代码中说“导入配置”,因为我不知道名称。我更新了这个问题,以反映该文件是用户定义的/随机命名的。您的问题在@010110101被问得很糟糕。请确保在问题中包含所有相关信息,并根据需要更新问题,以便我们不会提交几乎不相关的答案。