2013-01-10 77 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