我正在尝试从名为my_classes.py
的模块中导入一个类。问题是,它位于名为@file_directory的目录中。
这样的结构是,在项目目录的顶部有main.py,在同一级别还有一个名为lib的目录。在“lib”中,有一个名为“@file_directory”的子目录,在其中有一个模块“my_classes”,如下所示。
-> main.py
-> /lib
-> lib_other_files.py
-> /@file_directory
-> my_classes.py
我通常能做的是
from lib.@file_directory.myclasses import cust_class
但是因为
@
符号是包装符号,所以它阻止了我从'@file_directory'导入文件。当然,简单的选择就是更改目录名称,但是我想保留文件名/没有权限在项目中更改它。有没有办法使用像escpae这样的字符从具有特殊字符的目录中导入模块? 最佳答案
另一种可能性:use the __import__()
built-in function。从本质上讲,这消除了常规import
命令的开销,但由于它只将字符串作为参数,因此可以为包命名提供更大的灵活性-并且该字符串可以转义否则无效的字符。
因此,此代码应工作:
_temp = __import__("lib.@file_directory.myclasses", globals(), locals(), ['cust_class'], 0)
cust_class = _temp.cust_class
编辑:python标准库建议改为使用
importlib
。相同的代码如下所示:import importlib
cust_class = importlib.import_module("lib.@file_directory.myclasses", "cust_class")