繁体   English   中英

如何从位于名为'@file_directory'的文件目录中的模块或具有特殊字符的目录中导入python类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM