我正在尝试从名为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")

10-02 08:15
查看更多