我有一个名为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的空文件。 在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!

其他回答

对于这个文件夹层次图示例:

/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)。

包括完整的示例

这基本上涵盖了所有情况(确保你有__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目录是否包含__init__.py文件?

Python使用__init__.py来确定一个目录是否是一个模块。

在/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()

/项目/ tester.py

/项目/ lib / BoxTime.py

在一行中创建空白文件__init__.py,直到到达该文件

/project/lib/somefolder/BoxTime.py

#lib——needs有两个项目,一个__init__.py和一个名为somefolder的目录 #somefolder有两项boxtime.py和__init__.py