【问题标题】:How do I share a python script's imports with another script?如何与另一个脚本共享 python 脚本的导入?
【发布时间】:2011-03-28 09:19:40
【问题描述】:

假设我有一个带有导入的 script1.py。

如何与 script2.py 共享 script1.py 导入?无需复制和粘贴。

【问题讨论】:

  • 将你的 Python 程序拆分成模块?
  • 你真的需要所有这些进口吗?您是否使用了所有要导入的类型?
  • 似乎(对我而言)您应该更加模块化您的应用程序;)
  • 检查我的答案。现在它被编辑了。这可能会有所帮助。
  • 经典 X、Y 问题。你应该问的是,“我怎样才能减少依赖的数量?”

标签: python django oop import


【解决方案1】:

您的应用程序应包含许多逻辑上独立的模块。它使您的程序更易于阅读、调试等。就像 Python 的标准库分为许多模块(正如您所说 - 您必须从其中的许多模块中导入内容)。

您拥有的模块越多,您需要在每个模块中执行的导入就越少。 这是因为程序的每个单独部分只导入它需要的内容。由于这种态度,您和其他程序员可以轻松理解代码。

另一种处理方式(不太推荐):

imports.py:(在本例中,我假设您将其与 test.py 放在同一目录中)

from datetime import date
from re import *

test.py:

from imports import * #you import your imports

today = date.today() #using what you imported in imports.py
print(today)

由于可能导入相同的名称,这可能很危险。小心!

【讨论】:

  • 这种间接级别总是令人困惑。拥有“主导入”会使代码分析变得相当困难,因为您无法再执行简单的“grep”来查找依赖项。
  • 这就是为什么我首先建议分成模块。其次,做一些不同的事情。
  • imports.py 方法是一件坏事。您的答案以一种使它看起来不错的方式呈现出来。我没有看到很多警告,所以我在 cmets 中添加了一个。
【解决方案2】:

虽然我同意 cmets... 你可以拥有一个定义 all 属性的模块

from crazyapp import all, my, imports

__all__ =['all', 'my', 'imports']

然后调用导入模块。

from allmyimports import *

但是,如果您有那么多.... 200 个?将模块视为做一件事并做好一件事的东西。您会发现您的进口量大部分会下降。

【讨论】:

  • 所以,如果我的 "crazyapp.py" 有 200 个导入,那么在我的其他文件中......我可以执行 "from crazyapp import all, my, imports" ,它会变得很疯狂。 py 的导入?
  • @TIMEX,不,from crazyapp import all, my, imports 仅导入 allmyimports。如果你想要所有的 crazyapp,那么 import crazyapp,然后使用 crazyapp.xcrazyapp.y 等等。我认为这个答案试图向您展示的是如何控制 from X import * 实际导入的内容,即模块的 __all__ 属性定义的符号。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多