如何使用任意路径将Python模块导入到本地变量中?

12 浏览
0 Comments

如何使用任意路径将Python模块导入到本地变量中?

我正在尝试使用一个Python文件作为配置文件。在我的真实程序中,我允许用户在命令行指定配置文件。

以下是我的示例:

some_randomly_named_file.py:

import os
from datetime import timedelta
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中:

# 解析命令行并获取路径
path_to_file = '/foo/bar/baz/some_randomly_named_file.py'
# 将path_to_file中的Python文件加载到本地变量myconfig中
# [我应该在这里写些什么来完成这个任务?]
# 现在我们有了一个名为myconfig的本地变量
print(myconfig.PROJECT)

输出结果:

我的项目

0
0 Comments

问题的出现原因:用户需要根据任意路径将Python模块导入到本地变量中。然而,由于模块的路径和名称在编译时是未知的,因此无法直接在代码中指定模块的名称。

解决方法:可以通过将路径添加到sys.path来解决这个问题。具体步骤如下:

1. 导入sys模块:import sys

2. 将路径添加到sys.path:sys.path.append("/foo/bar/baz/")

3. 导入模块:import myconfig

4. 将模块内容赋值给本地变量:local_var = myconfig.PROJECT

另外,可以使用os.path.basename()和os.path.dirname()函数来获取用户输入的值。以下是一个示例程序,用于从用户获取配置文件名和目录路径:

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

运行上述程序的输出结果为:

/var/log
syslog

通过将路径添加到sys.path并使用import语句导入模块,可以在任意路径下将Python模块导入到本地变量中。同时,可以使用os.path.basename()和os.path.dirname()函数来处理用户输入的文件名和路径。

0
0 Comments

如上所述。只需将源文件(config.py)添加到sys路径中。当您将config.py文件添加到路径中时,Python会将该文件(及其内容)视为普通模块。以下是更详细的解释:

# 将config.py作为模块加载
import sys
sys.path.append("/foo/bar/baz/") # config.py父文件夹的路径
import config # 作为常规模块导入
print(config.PROJECT)
"my project"

您可以使用这个非常相似的问题作为参考。

文件名和路径是随机命名的。我不会在编译时知道路径,也不会知道文件名。我不能在代码中说"import config",因为我不知道名字。我更新了问题以反映文件是用户定义/随机命名的。

嗯,你的问题提得不太好。请确保在问题中包含所有相关信息,并根据需要更新问题,以免我们提交几乎无关的答案。

0
0 Comments

问题的出现原因是:需要导入一个Python模块到一个本地变量中,但是模块的路径是任意的。

解决方法如下:

1. 导入必要的模块和库。代码中导入了os、importlib.machinery模块。

2. 定义要导入的模块的路径。在代码中,path_to_file变量指定了要导入的模块的路径。

3. 使用os模块获取模块所在的目录和文件名。在代码中,使用os.path.split()函数将路径拆分成目录和文件名,并将其分别赋值给module_dir和module_file变量。

4. 使用os.path.splitext()函数获取模块的名称和扩展名。在代码中,使用os.path.splitext()函数将文件名拆分成名称和扩展名,并将其分别赋值给module_name和module_ext变量。

5. 使用importlib.machinery.SourceFileLoader类加载模块。在代码中,使用SourceFileLoader类的load_module()方法加载指定路径下的模块,并将其赋值给变量x。

6. 使用导入的模块进行相应操作。在代码中,使用x来访问导入的模块,并打印出myconfig.PROJECT。

相关和有用的文章列表:

- [How to import a module given the full path?](https://stackoverflow.com/questions/67631)

- [Python 3.4: How to import a module given the full path?](https://stackoverflow.com/questions/27381264)

- [Import arbitrary python source file. (Python 3.3+)](https://stackoverflow.com/questions/19009932)

0