从不同文件夹导入模块

use*_*592 14 python

我有以下文件安排:

    python
     |--main.py
     |files
        |-----folder1
                |-----a.py,a1.py.....
        |-----folder2
                |-----b.py,b1.py....
Run Code Online (Sandbox Code Playgroud)

我想将模块a和b.py导入main.py. 为此,我在main.py中使用了以下命令:

    a = 'C:/python/files/folder1'
    sys.path.insert(0, a)
    from files.folder1 import *
Run Code Online (Sandbox Code Playgroud)

但是,我无法从folder1导入模块(类似于folder2).我收到一个错误:

    No module named files.folder1
Run Code Online (Sandbox Code Playgroud)

我不能使用import命令,因为folder1,folder2中有很多python文件......等等.

我在这里错过了什么吗?

Yun*_* Ma 31

快速回答:

将文件__init__.py(可以为空)添加到文件夹文件,folder1folder2.然后你得到了一个带有子包folder1folder2的包文件.在此之后,您可以从main.py导入,如下所示:

from files.folder1 import *
Run Code Online (Sandbox Code Playgroud)

  • 很好的直截了当的答案! (2认同)

mjg*_*py3 20

当我在Python 2.7中执行此操作时,我使用:

import sys
sys.path.append('C:/python/files/folder1')

import a
import a1
Run Code Online (Sandbox Code Playgroud)

UPDATE

这是我为将目录中的所有模块导入字典而构建的hack:

import os
import sys

dir_of_interest = 'C:/python/files/folder1'
modules = {}

sys.path.append(dir_of_interest)
for module in os.listdir(dir_of_interest):
    if '.py' in module and '.pyc' not in module:
        current = module.replace('.py', '')
        modules[current] = __import__(current)
Run Code Online (Sandbox Code Playgroud)

我刚刚建造它,它非常hacky但它​​可能更像你想要的东西.所以,要访问你想要的模块,而不是说module_name.thing你会说modules["module_name"].thing