我想知道在Python应用程序中导入包的首选方法。我有一个这样的包结构:
project.app1.models
project.app1.views
project.app2.models
project.app1.views进口project.app1.models和project.app2.models。我想到有两种方法可以做到这一点。
绝对进口:
import A.A
import A.B.B
或具有明确的相对导入,如在Python 2.5中使用PEP 328引入的那样:
# explicit relative
from .. import A
from . import B
什么是最pythonic的方式做到这一点?
绝对进口。从PEP 8:
强烈建议不要将相对进口用于包装内进口。始终对所有导入使用绝对包路径。即使现在PEP 328 [7]已在Python 2.5中完全实现,仍不鼓励使用其显式相对导入的样式。绝对导入更具可移植性,通常更具可读性。
显式相对导入是一种不错的语言功能(我想),但是它们不像绝对导入那样显式。更具可读性的形式是:
import A.A
import A.B.B
特别是如果您导入几个不同的名称空间。如果您看一些写得很好的项目/教程,其中包括从包中导入的内容,则它们通常遵循这种风格。
您需要进行一些更明确的额外击键操作,将来会在其他人(也许是您)试图弄清楚您的命名空间时(尤其是如果您迁移到3.x,在其中一些软件包中)节省了很多时间。名称已更改)。
根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不:
问题内容: 在Python中使用相对导入有一个缺点,您将无法再独立运行模块,因为您将得到一个异常: 为了能够执行以下所有操作,我应该如何修改示例代码:和 我正在寻找适用于python 2.6+(包括3.x)的解决方案。 问题答案: 首先,我假设您意识到您编写的内容将导致循环导入问题,因为foo导入bar反之亦然;尝试添加 to test.py,您将看到它失败。必须更改示例才能正常工作。 因此,您要
问题内容: 给定相对路径,如何导入Python模块? 例如,如果包含和,和包含,我怎么导入到? 这是一个视觉表示: 希望包含,但是重组文件夹层次结构不是一种选择。 问题答案: 假设你的两个目录都是真实的Python包(文件中确实有文件),那么这是一个相对于脚本位置包含模块的安全解决方案。 我假设你想这样做,因为你需要在脚本中包括一组模块。我在多个产品的生产环境中使用了此功能,并在许多特殊情况下工作
问题内容: 我正在python 2.7中开发自己的模块。它位于而不是或中。内部结构为: 包括课程。我遇到导入问题: 我没有将PythonPath设置为包括我的,因此,当server.http尝试包含client.PyCachedClient时,它将尝试从相对路径加载它并失败。我的问题是- 我应该如何以良好的pythonic方式设置所有路径/设置?我知道每次打开控制台并尝试运行服务器时都可以在she
问题内容: 假设我们有两个具有循环依赖性的模块: 这两个模块在目录中为空。如此答案中所述,导入或工作正常。如果我将进口改为相对进口) 我得到一个想要的模块的进口之一时: 为什么会出现此错误?情况与上面的情况大不相同吗? 编辑 :此问题与软件设计无关。我知道避免循环依赖的方法,但是无论如何我都对错误的原因感兴趣。 问题答案: 首先让我们从python的工作方式开始: 首先让我们看一下字节码: 嗯,有
主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字