gpt4 book ai didi

来自同一文件夹的 python __import__ 失败

转载 作者:行者123 更新时间:2023-11-28 17:53:49 26 4
gpt4 key购买 nike

我的目录结构是这样的:

|- project
|- commands.py
|- Modules
| |- __init__.py
| |- base.py
| \- build.py
\- etc....

我在__init__.py中有以下代码

commands = []
hooks = []

def load_modules():
""" dynamically loads commands from the /modules subdirectory """
path = "\\".join(os.path.abspath(__file__).split("\\")[:-1])
modules = [f for f in os.listdir(path) if f.endswith(".py") and f != "__init__.py"]
print modules
for file in modules:
try:
module = __import__(file.split(".")[0])
print module
for obj_name in dir(module):
try:
potential_class = getattr(module, obj_name)
if isinstance(potential_class, Command):
#init command instance and place in list
commands.append(potential_class(serverprops))
if isinstance(potential_class, Hook):
hooks.append(potential_class(serverprops))
except:
pass
except ImportError as e:
print "!! Could not load %s: %s" % (file, e)
print commands
print hooks

我试图让 __init__.py 将适当的命令和 Hook 加载到给定的列表中,但是我总是在 module = __import__(file.split(".")[0]) 即使 __init__.py 和 base.py 等都在同一个文件夹中。我已验证任何模块文件中的任何内容都不需要 __init__.py 中的任何内容,所以我真的不知道该怎么做。

最佳答案

您所缺少的只是系统路径上的模块。添加

import sys
sys.path.append(path)

在你的 path = ... 行之后,你应该被设置。这是我的测试脚本:

import os, os.path, sys

print '\n'.join(sys.path) + '\n' * 3

commands = []
hooks = []

def load_modules():
""" dynamically loads commands from the /modules subdirectory """
path = os.path.dirname(os.path.abspath(__file__))

print "In path:", path in sys.path
sys.path.append(path)

modules = [f for f in os.listdir(path) if f.endswith(".py") and f != "__init__.py"]
print modules
for file in modules:
try:
modname = file.split(".")[0]
module = __import__(modname)
for obj_name in dir(module):
print '%s.%s' % (modname, obj_name )
except ImportError as e:
print "!! Could not load %s: %s" % (file, e)
print commands


load_modules()

关于来自同一文件夹的 python __import__ 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4496156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com