从子目录导入文件?

新手上路,请多包涵

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

原文由 Adam Matan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

查看 Packages 文档(第 6.4 节)

简而言之,你需要把一个空白文件命名为

__init__.py

lib 目录中。

原文由 Greg 发布,翻译遵循 CC BY-SA 4.0 许可协议

  • 创建一个名为 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!

原文由 hughdbrown 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题