从子目录导入文件?
我有一个名为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()
请看这里的Packages文档(6.4节): http : //docs.python.org/tutorial/modules.html
总之,你需要把一个空白的文件命名
__init__.py
在“lib”目录下。
- 创build一个名为lib的子目录。
- 创build一个名为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!
你可以尝试在sys.path
插入它:
sys.path.insert(0, './lib') import BoxTime
你的lib目录是否包含一个__init__.py
文件?
Python使用__init__.py
来确定一个目录是否是一个模块。
尝试import .lib.BoxTime
。 有关更多信息,请阅读PEP 328中的相关导入。
我这样做基本上覆盖了所有的情况(确保你有相对/path/到/你的/ 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()
尝试这个:
from lib import BoxTime