![](/img/trans.png)
[英]Python import file from the same directory: ModuleNotFoundError: No module named
[英]How do I import python class from a module located within file directory named '@file_directory' or directory with special characters?
我正在尝试从名为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字符一样从具有特殊字符的目录导入模块?
另一种可能性: 使用__import__()
内置函数 。 这基本上消除了正常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")
您不能导入带有'@'符号等字符的模块...但是,使用execfile可能是适合您的解决方法。
用Python 2.7.5测试
my_classes.py示例代码:
def printMe():
print "foo from my_classes"
main.py示例代码:
execfile("./lib/@file_directory/my_classes.py")
printMe()
执行main.py打印输出:
>>python main.py
foo from my_classes
发生的事情是main.py将运行my_classes.py文件,现在您可以直接引用my_classes.py中的函数或任何相关代码。
Python 3.X等效
我没有安装python 3,但他们确实删除了execfile .. execfile的替代方案是:
exec(open("./lib/@file_directory/my_classes.py").read())
希望这可以帮助您完成您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.