从子目录导入文件?

我有一个名为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