开发软件包时如何使用绝对导入

时间:2019-03-28 12:37:47

标签: python import package

一段时间以来,我一直在努力打包进口。开发软件包时,我到处都读到,最好在该软件包的子模块中使用绝对导入。我了解这一点,并且也更喜欢它。但是后来我不喜欢,我还读到您不应该在开发中使用sys.path.append('/path/to/package')来使用您的软件包...

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

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

1 个答案:

答案 0 :(得分:1)

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

在包(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并将其用作软件包。