首页 > 解决方案 > 开发包时如何使用绝对导入

问题描述

我一直在努力解决包中的导入问题。当我开发一个包时,我到处读到最好在该包的子模块中使用绝对导入。我理解这一点,我也更喜欢它。但后来我不喜欢,我也读到你不应该sys.path.append('/path/to/package')在开发中使用你的包......

所以我的问题是,你如何从零开始开发这样一个包,直接使用绝对导入?目前我使用相对导入开发包,从那时起我可以在打包和安装之前测试我正在编写的代码,然后在我发布并构建包后更改导入。

做这种事情的正确方法是什么?例如,在 Pycharm 中,您可以将文件夹标记为“source roor”,并且能够像包文件夹在路径中一样工作。我仍然读到这不是正确的方法......我错过了什么?在测试代​​码的同时如何开发一个包?

标签: pythonimportpackage

解决方案


您的里程可能会有所不同,但这是我通常做的:

在包 ( foo) 中,绝对 ( import foo.bar) 或相对 ( import .bar) 对我来说并不重要,只要它有效。有时,我更喜欢相对的,尤其是当项目很大并且有一天我可能决定将许多源文件移动到一个子目录中时。

我该如何测试?我$PYTHONPATH通常.在其中,我的目录层次结构是这样的:

/path/to/foo_project
   /setup.py
   /foo
      /__init__.py
      /bar.py
   /test
      /test1.py
      /test2.py

那么里面的脚本foo_project/test/test1.py就会像你通常使用的包一样,使用import foo.bar. 当我测试我的代码时,我将在目录中foo_project运行python test/test1.py. 由于我.在我的 中$PYTHONPATH,它会找到该目录foo并将其用作一个包。


推荐阅读