我有一个名为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()
我把这个写下来是因为每个人似乎都建议你必须创建一个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)
对于这个文件夹层次图示例:
/project/tester.py
/project/lib/BoxTime.py
1-在lib文件夹中创建一个空白的py文件__init__.py
在调用者的py文件tester.py中添加这些代码行
import os, sys
sys.path.insert(0,'lib')# insert the folder lib in system path
from BoxTime import Function_name # from the py file import the needed function
在这里可以找到简单的解释。
注意:这是指在不同的文件夹中创建/导入模块。
个人经验:我尝试从jupyter笔记本创建模块,它不工作(可能我不正确地使用。ipynb),我需要在juypyter笔记本外手动完成,或使用其他IDE(例如pycharm)。
创建名为lib的子目录。
创建一个名为lib\__init__.py的空文件。
在lib\BoxTime.py中,像这样写一个函数foo():
def foo ():
打印“foo”!
在lib上面目录下的客户端代码中,写:
从lib导入BoxTime
BoxTime.foo ()
运行客户端代码。你会得到:
喷火!
很久以后——在linux中,它看起来是这样的:
% cd ~/tmp
% mkdir lib
% touch lib/__init__.py
% cat > lib/BoxTime.py << EOF
heredoc> def foo():
heredoc> print "foo!"
heredoc> EOF
% tree lib
lib
├── BoxTime.py
└── __init__.py
0 directories, 2 files
% python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lib import BoxTime
>>> BoxTime.foo()
foo!