我试图将python文件用作配置文件。在我的真实程序中,我让用户在命令行中指定配置文件。
这是我的榜样:
some_randomly_named_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')
该文件存储在此处:/foo/bar/baz/some_randomly_named_file.py
...然后在myapp.py
:
# 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
答案 0 :(得分:1)
尝试将您的路径添加到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
#python test.py /var/log/syslog
/var/log
syslog
答案 1 :(得分:1)
像@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"
您可以使用this very similar question作为参考。
答案 2 :(得分:0)
我根据this SO article中@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)
相关且有用的文章列表:
How to import a module given the full path?