Python 从不同文件夹导入模块
我的档案安排如下:Python 从不同文件夹导入模块,python,Python,我的档案安排如下: python |--main.py |files |-----folder1 |-----a.py,a1.py..... |-----folder2 |-----b.py,b1.py.... 我想将模块a和b.py导入main.py。为此,我在main.py中使用了以下命令: a = 'C:/python/files/folder1'
python
|--main.py
|files
|-----folder1
|-----a.py,a1.py.....
|-----folder2
|-----b.py,b1.py....
我想将模块a和b.py导入main.py。为此,我在main.py中使用了以下命令:
a = 'C:/python/files/folder1'
sys.path.insert(0, a)
from files.folder1 import *
但是,我无法从folder1导入模块(类似于folder2)。
我得到一个错误:
No module named files.folder1
我不能使用import命令,因为folder1、folder2…等中有许多python文件
我在这里遗漏了什么吗?在Python 2.7中执行此操作时,我使用:
import sys
sys.path.append('C:/python/files/folder1')
import a
import a1
更新
下面是我为将目录中的所有模块导入字典而构建的一个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)
我刚建了它,非常粗糙,但它可能更像你想要的东西。因此,要访问您想要的模块,不要说
module\u name.thing
,而是说modules[“module\u name”]。thing
如果您将folder1
添加到路径中,这并不意味着您可以作为模块导入folder1
。这意味着您可以导入folder1中的文件。所以你可以做:
import a
import a1
如果你想让folder1
成为一个包,其中a
和a1
是模块,你需要在folder1
中放置一个\uu init\uuuuuuuuuuuuuuupy
,然后导入folder1。如果您还希望能够从folder1 import*执行,并导入a
和a1
,则需要将代码放入导入a
和a1
的初始化.py
如果您希望能够以结构化方式导入文件夹中的大量文件,则应将该文件夹制作成一个包
我不能使用import命令,因为folder1、folder2…等中有许多python文件。
我是不是遗漏了什么
我相信您缺少的部分是每个文件夹中的_uinit__;.py文件。该文件应包含一个uuu all uuuuu变量,该变量列出了将通过以下方式导入的所有子模块:从somepackage.subpackage import*
这一切都在文章中得到了优雅的解释
希望这有帮助:-)快速回答:
将文件\uuuu init\uuuuu.py
(可以为空)添加到文件夹文件、文件夹1和文件夹2。然后您得到了一个包含子包folder1和folder2的包文件。之后,您可以从main.py导入,如下所示:
from files.folder1 import *
但是,我同意,如果您有大量文件,那么编写许多导入语句不是很麻烦吗?@user741592:为什么要将代码拆分为多个文件?您应该将相关的内容组合到一个模块中。不幸的是,需要拆分代码。我很乐意将区块分组到一个文件中。请参阅上面的编辑/破解。。。它可能更像你要找的东西。很好的直截了当的回答!假设我的文件夹结构类似于dataaccess.service/services.py,那么现在如何导入此路径?提供的参考链接确实很好地解释了这一点。