如何导入子目录中的 python class,其中脚本和子目录都有连字符?
How can I import a python class which is in a sub directory, where the script and sub directory both have hyphens?
下面是我的文件夹结构。
Main_Folder
|
|-my_script.py
|
|-level-1
|--__init__.py
|
|--level-2
|--__init__.py
|
|--new_script.py
新脚本是一小段代码
class check:
def print_me():
print("inside the class")
我正在尝试将其导入 my_script.py
。
代码片段是:
import importlib
mod = importlib.import_module("level-1.level-2.new_script.check")
my_instance = check()
my_instance.print_me()
我收到以下错误:
Traceback (most recent call last):
File "/home/danish/tuts/del_check/my_script.py", line 4, in <module>
mod = importlib.import_module("level-1.level-2.new_script.check")
File "/home/danish/anaconda3/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 970, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'level-1.level-2.new_script.check'; 'level-1.level-2.new_script' is not a package
我继续搜索 solution。但是没有用。我在这里做错了什么。 此外,更改目录名称不是一个选项。
让我们首先更新您的 class 方法:
class check:
def print_me(self):
print("inside the class")
然后我们就可以导入模块了。请注意,check
是一个 class,因此我们不要尝试将其作为模块导入。
import importlib
mod = importlib.import_module("level-1.level-2.new_script")
my_instance = mod.check()
my_instance.print_me()
这应该给你:
inside the class
下面是我的文件夹结构。
Main_Folder
|
|-my_script.py
|
|-level-1
|--__init__.py
|
|--level-2
|--__init__.py
|
|--new_script.py
新脚本是一小段代码
class check:
def print_me():
print("inside the class")
我正在尝试将其导入 my_script.py
。
代码片段是:
import importlib
mod = importlib.import_module("level-1.level-2.new_script.check")
my_instance = check()
my_instance.print_me()
我收到以下错误:
Traceback (most recent call last):
File "/home/danish/tuts/del_check/my_script.py", line 4, in <module>
mod = importlib.import_module("level-1.level-2.new_script.check")
File "/home/danish/anaconda3/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 970, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'level-1.level-2.new_script.check'; 'level-1.level-2.new_script' is not a package
我继续搜索 solution。但是没有用。我在这里做错了什么。 此外,更改目录名称不是一个选项。
让我们首先更新您的 class 方法:
class check:
def print_me(self):
print("inside the class")
然后我们就可以导入模块了。请注意,check
是一个 class,因此我们不要尝试将其作为模块导入。
import importlib
mod = importlib.import_module("level-1.level-2.new_script")
my_instance = mod.check()
my_instance.print_me()
这应该给你:
inside the class