[英]python import techniques for multiple files using same libraries
好吧,我有一個問題,我想知道什么是等同於including
許多文件合並成一個single php file
(說這個文件被稱為init.php
)。 例如, init.php
讀取Directory X
並包含每個文件*.php
。 現在, init.php
導入的這些文件中包含的任何文件init.php
將在腳本(或系統)中共享。
在類似的例子中,但是這次使用python
,我有一個名為init.py
的文件,它讀取Directory Y
並使用find_packages() imports
每個模塊(或包),例如import numpy as np, os, sys
行。 Directory Y
文件或每個文件是否需要此import
行? 為了訪問os
和sys
? python示例與php示例有相同或不同的含義嗎? 為什么?
如果import
文件,那么Python將執行兩個不同的步驟:
import
語句。 請注意,如果您導入模塊foo
那么您將無法訪問命名空間中foo
導入的模塊 - 您需要直接導入它們(或通過foo.module
訪問它們,但通常您需要導入它們在你的模塊中)。
簡而言之,每個想要使用模塊foo
文件都需要導入它,即使同一個應用程序中的其他文件也使用它。
如果你來自另一種語言,可能會讓人感到困惑的一件事是Python只會實際執行一次給定的模塊(除非你調用reload()
),即使它是在很多地方導入的。 這就是為什么我將import
操作分成上面的兩半 - 第一個只對每個導入的模塊執行一次,但第二個總是發生。
因此,如果您import foo
本身執行import bar
則foo
和bar
都已加載並執行一次。 你的模塊可以訪問foo
,但不是bar
因為你沒有導入它(再次,你可以將它用作foo.bar
,但這通常不是很好的做法)。 如果您現在運行import bar
那么您的模塊中將有可用的bar
,但是一旦Python 無法加載並且第二次執行該模塊,該模塊已經被導入。
如果您需要更多詳細信息, 官方Python文檔中詳細說明了模塊的工作方式。
這是否回答你的問題?
額外細節
通常,您不需要通過掃描目錄在運行時加載模塊,但有些情況下這可能很有用(例如,實現插件)。 如果您只想根據安裝的模塊的固定模塊列表進行選擇,您只需執行標准import
並捕獲ImportError
並通過嘗試列表中的下一個來處理它。
如果確實需要加載的模塊,當你不知道名字,直到運行時,您可以使用導入庫 。 Python標准庫還提供了幾個用於導入模塊的其他模塊 ,例如imp ,它具有按文件名定位和導入模塊的功能。
聽起來你已經有了解決方案,但有時知道還有什么可用(這些模塊都是標准庫的一部分,所以總是安裝)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.