2013-01-10 48 views
0

好的我有一个问题,我想知道什么是相当于including许多文件到一个single php file(说这个文件被称为init.php)。并且例如init.php读取Directory X并且包括每个文件*.php。现在将在脚本(或系统)中共享由init.php导入的这些文件中包含的任何文件。使用相同库的多个文件的Python导入技术

在类似的例子,但此时用python,我有一个称为init.py文件,使用find_packages()将会或将包括在整个文件系如import numpy as np, os, sysDirectory Y每个这些读取超过Directory Yimports每个模块(或封装)文件需要这个import行?为了访问ossys? python示例与php示例有相同或不同的含义吗?为什么?

回答

2

如果import一个文件,那么Python会执行两个不同的步骤:

  1. 打开导入模块文件并执行它,包括在模块中的任何import语句。
  2. 使导入的模块在当前模块的名称空间中可用。

请注意,如果您导入模块foo,那么你将无法获得通过foo在命名空间导入模块 - 你需要直接导入(或通过foo.module访问它们,但通常你会想要将它们导入你的模块中)。

简而言之,即使同一应用程序中的其他文件也使用它,每个要使用模块foo的文件都需要导入它。

一件事,如果你从另一种语言来可能会造成混淆的是,Python的只有永远居然一下子执行给定模块(除非你调用reload()),即使它在很多地方的输入型。这就是为什么我将import的动作分为两部分 - 第一部分只对每个导入的模块执行一次,但第二部分总是发生。

所以,如果你这样做import foo这本身执行import bar那么这两个foobar已经被加载并执行一次。您的模块有权访问foo,但不能使用bar,因为您尚未导入它(同样,您可以将其作为foo.bar使用,但这通常不是很好的做法)。如果您现在运行import bar,那么您的模块中将有bar可用,但是由于该模块已被导入,一旦Python将而非加载并再次执行该模块。

如果您需要更多详细信息,有关模块工作方式的详细信息请参见official Python documentation

这是否回答你的问题?

额外的细节

通常你不需要通过扫描目录加载在运行时模块,但存在这样的情况,可以是有用的(例如实施插件)。如果你只是想安装基于哪些模块的固定列表之间进行选择,你可以做一个标准的import,赶上ImportError并试图在列表中的下一个处理。

如果需要加载的模块,当你不知道名字,直到运行时,您可以使用importlib。 Python标准库还提供several other modules for importing modules,如imp,其具有用于定位和通过文件名导入模块的功能。

这听起来像你已经得到了一个解决方案,但它有时是有用知道的是可还有什么(而这些模块是标准库的一部分,所以总是安装)。

+0

是它呢!谢谢:),一旦计时器已到期将选择。再次感谢! – Killrawr