我有一个名为test .py的文件,位于/project上。
/project有一个子目录叫lib,里面有一个文件叫BoxTime.py:
/project/tester.py
/project/lib/BoxTime.py
我想从测试器导入BoxTime。我试过了:
import lib.BoxTime
结果:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
有什么想法如何从子目录导入BoxTime ?
EDIT
__init__.py是问题所在,但不要忘记将BoxTime引用为lib。BoxTime,或使用:
import lib.BoxTime as BT
...
BT.bt_function()
包括完整的示例
这基本上涵盖了所有情况(确保你有__init__.py相对/path/到/your/lib/文件夹):
import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/your/lib/folder")
import someFileNameWhichIsInTheFolder
...
somefile.foo()
例子:
你的项目文件夹中有:
/root/myproject/app.py
在另一个项目文件夹中有:
/root/anotherproject/utils.py
/root/anotherproject/__init__.py
你需要使用/root/anotherproject/utils.py并调用其中的foo函数。
所以你在app。py中写道:
import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../anotherproject")
import utils
utils.foo()
我把这个写下来是因为每个人似乎都建议你必须创建一个lib目录。
您不需要将子目录命名为lib。你可以给它起任何名字,只要你在里面放了__init__.py。
你可以在linux shell中输入以下命令:
$ touch anything/__init__.py
现在你有了这个结构:
$ ls anything/
__init__.py
mylib.py
$ ls
main.py
然后你可以像这样将mylib导入main.py:
from anything import mylib
mylib.myfun()
你也可以像这样导入函数和类:
from anything.mylib import MyClass
from anything.mylib import myfun
instance = MyClass()
result = myfun()
你放在__init__.py中的任何变量函数或类也可以访问:
import anything
print(anything.myvar)
或者像这样:
from anything import myvar
print(myvar)