我有一个名为tester.py
的文件,位于/project
。
/project
有一个子目录lib
,文件名为BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
我想从tester
导入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
?
编辑
__init__.py
是问题所在,但不要忘记将BoxTime
称为lib.BoxTime
,或使用:
import lib.BoxTime as BT
...
BT.bt_function()
#1楼
在此处查看Packages文档(第6.4节): http : //docs.python.org/tutorial/modules.html
简而言之,您需要放置一个名为
__init__.py
在“ lib”目录中。
#2楼
尝试import .lib.BoxTime
。 有关更多信息,请参阅PEP 328中的相对导入。
#3楼
您的lib目录是否包含__init__.py
文件?
Python使用__init__.py
来确定目录是否为模块。
#4楼
- 创建一个名为
lib
的子目录。 - 创建一个名为
lib\\__init__.py
的空文件。 在
lib\\BoxTime.py
,编写一个函数foo()
如下所示:def foo(): print "foo!"
在
lib
上方目录中的客户机代码中,编写:from lib import BoxTime BoxTime.foo()
运行您的客户端代码。 你会得到:
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!
#5楼
您可以尝试将其插入sys.path
:
sys.path.insert(0, './lib')
import BoxTime
#6楼
尝试这个:
from lib import BoxTime
#7楼
我这样做基本上涵盖了所有情况(确保相对/路径/到/您的/ lib /文件夹中有__init__.py
):
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()
#8楼
在/ lib子目录中创建一个空文件__init__.py
。 并在主代码的开头添加
from __future__ import absolute_import
然后
import lib.BoxTime as BT
...
BT.bt_function()
或更好
from lib.BoxTime import bt_function
...
bt_function()
#9楼
/project/tester.py
/project/lib/BoxTime.py
在该行下创建空白文件__init__.py
,直到找到该文件
/project/lib/somefolder/BoxTime.py
#lib
需要两个项目,一个是__init__.py
,一个名为somefolder的目录#somefolder
有两个项目, boxtime.py
和__init__.py
#10楼
我写下来是因为每个人似乎都建议您必须创建一个lib
目录。
您无需命名子目录lib
。 只要将__init__.py
放入其中,就可以命名anything
。
您可以通过在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)