来自* folder_name * import * variable * Python 3.4.2

时间:2015-03-03 16:21:39

标签: python input python-3.4 python-import python-importlib

文件设置:

...\Project_Folder
...\Project_Folder\Project.py
...\Project_folder\Script\TestScript.py

我正在尝试根据用户输入从文件夹脚本中导入Project.py导入模块。

Python版本:3.4.2

理想情况下,脚本看起来像

q = str(input("Input: "))
from Script import q 

但是,使用import时,python不会将q识别为变量。

我尝试使用 importlib ,但我无法弄清楚如何从上面提到的脚本文件夹导入。

import importlib
q = str(input("Input: "))
module = importlib.import_module(q, package=None)

我不确定在哪里实现文件路径。

2 个答案:

答案 0 :(得分:0)

重复我最初发布在How to import a module given the full path?的答案 因为这是一个Python 3.4特定的问题:

Python 3.4的这个领域似乎非常曲折,主要是因为文档没有给出好的例子!这是我尝试使用未弃用的模块。它将导入给定.py文件路径的模块。我正在使用它在运行时加载“插件”。

def import_module_from_file(full_path_to_module):
    """
    Import a module given the full path/filename of the .py file

    Python 3.4

    """

    module = None

    try:

        # Get module name and path from full path
        module_dir, module_file = os.path.split(full_path_to_module)
        module_name, module_ext = os.path.splitext(module_file)

        # Get module "spec" from filename
        spec = importlib.util.spec_from_file_location(module_name,full_path_to_module)

        module = spec.loader.load_module()

    except Exception as ec:
        # Simple error printing
        # Insert "sophisticated" stuff here
        print(ec)

    finally:
        return module

# load module dynamically
path = "<enter your path here>"
module = import_module_from_file(path)

# Now use the module
# e.g. module.myFunction()

答案 1 :(得分:0)

我通过将整个导入行定义为字符串,使用q格式化字符串然后使用exec命令来完成此操作:

    imp = 'from Script import %s' %q
    exec imp