我有一个名为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子目录下创建一个空文件__init__.py。 并在主代码的开头添加

from __future__ import absolute_import 

then

import lib.BoxTime as BT
...
BT.bt_function()

或更好的

from lib.BoxTime import bt_function
...
bt_function()

其他回答

查看Packages文档(第6.4节)。

简而言之,您需要放置一个名为

__init__.py

在lib目录中。

包括完整的示例

这基本上涵盖了所有情况(确保你有__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. boxtime。有关更多信息,请阅读PEP 328中的相对导入。

试试这个:

从lib导入BoxTime

create_card.py

 init():
   print('Hello world!')

app.py

import create_card

create_card.init()

如果您只想导入所需的函数

from create_card import init

如果你有嵌套目录(例如:modules/aadhaar/create-card.py)

进口modules.aadhaar。Create_card作为Create_card或从modules.aadhaar。Create_card导入init