【问题标题】:How to import entire folder to another?如何将整个文件夹导入另一个?
【发布时间】:2023-04-01 19:28:01
【问题描述】:

这就是我的文件夹的样子(两个文件夹都有空的__init__.py 文件:

.
├── Filter
│   ├── __init__.py
│   └── stp.py
└── Time
    ├── __init__.py
    └── event.py

在 event.py 我目前有(有效):

from Filter.stp import *

但我想将其更改为(导入整个文件夹,因为我实际上有更多文件):

import Filter

我该怎么做?

【问题讨论】:

标签: python import module package


【解决方案1】:

假设stp.pyevent.py 文件包含以下内容:

# Filter/stp.py
a = 3
b = 4

# Time/event.py
class Event:
    pass

然后您可以在各自的__init__.py 文件中导入这些值:

# Filter/__init__.py
from Filter.stp import a, b

# Time/__init__.py
from Time.event import Event

通过使用此设置,您可以拥有如下所示的主文件:

import Filter
import Time

if __name__ == '__main__':
    print(Filter.a)  # 3
    print(Time.Event) # <class 'Time.event.Event'>

【讨论】:

  • 好的,谢谢,但是我没有主文件,没有主文件可以吗?
  • 您能说明一下您是如何尝试调用您的代码的吗?你打电话给python Time/event.py 还是python event.py,...?
【解决方案2】:

这可能不是最好的解决方案。

您需要导入__init__.py 目录下的所有文件。但是由于目录下文件很多,所以不能手动导入。

因此我们必须以编程方式编辑__ini__.py

import sy
path = "relative path to dir" 
files = os.listdir(path ) # i am assuming you only have the .py files you want to import
 files.pop('__init__.py')
import_file = open (path + '__init__.py', 'w+')
for f in files:
    import_file.write("import " + f.strip(".py") + "\n" )
import_file.close()

我现在无法运行代码,所以它可能并不完美。

【讨论】:

  • 谢谢,实际上我可以手动导入它们(大约 10 个文件),所以我可以在 init.py 中进行导入。但是我该如何以最好的方式做到这一点呢?
【解决方案3】:

from Filter.stp import * 有效吗?我相信你会得到一个找不到模块的错误。这是因为您必须在 Time 文件夹中拥有 Filter 文件夹。之后,您可以使用importfrom import

但是,如果您无法移动文件夹,则必须将路径(例如 C:/.../Filter)添加到您的 Filter 文件夹

import sys
sys.path.append('C:/.../Filter') # include the full path 

import stp # now you can import all the modules inside Filter

【讨论】:

  • 正确,“from Filter.stp import *”是我目前的解决方案。不幸的是,由于并发症,我无法将 Filter 文件夹放在 Time 文件夹中。你知道其他解决方案吗?
  • 谢谢,但我收到错误:NameError 'function in stp.py' not defined
  • 我的错,它是导入stp,因为文件夹过滤器已经添加了
猜你喜欢
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2021-10-02
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
相关资源
最近更新 更多