簡體   English   中英

使用相同庫的多個文件的python導入技術

[英]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行? 為了訪問ossys python示例與php示例有相同或不同的含義嗎? 為什么?

如果import文件,那么Python將執行兩個不同的步驟:

  1. 打開導入的模塊文件並執行它,包括模塊中的任何import語句。
  2. 使導入的模塊在當前模塊的命名空間中可用。

請注意,如果您導入模塊foo那么您將無法訪問命名空間中foo導入的模塊 - 您需要直接導入它們(或通過foo.module訪問它們,但通常您需要導入它們在你的模塊中)。

簡而言之,每個想要使用模塊foo文件都需要導入它,即使同一個應用程序中的其他文件也使用它。

如果你來自另一種語言,可能會讓人感到困惑的一件事是Python只會實際執行一次給定的模塊(除非你調用reload() ),即使它是在很多地方導入的。 這就是為什么我將import操作分成上面的兩半 - 第一個只對每個導入的模塊執行一次,但第二個總是發生。

因此,如果您import foo本身執行import barfoobar都已加載並執行一次。 你的模塊可以訪問foo ,但不是bar因為你沒有導入它(再次,你可以將它用作foo.bar ,但這通常不是很好的做法)。 如果您現在運行import bar那么您的模塊中將有可用的bar ,但是一旦Python 無法加載並且第二次執行該模塊,該模塊已經被導入。

如果您需要更多詳細信息, 官方Python文檔中詳細說明了模塊的工作方式。

這是否回答你的問題?

額外細節

通常,您不需要通過掃描目錄在運行時加載模塊,但有些情況下這可能很有用(例如,實現插件)。 如果您只想根據安裝的模塊的固定模塊列表進行選擇,您只需執行標准import並捕獲ImportError並通過嘗試列表中的下一個來處理它。

如果確實需要加載的模塊,當你不知道名字,直到運行時,您可以使用導入庫 Python標准庫還提供了幾個用於導入模塊的其他模塊 ,例如imp ,它具有按文件名定位和導入模塊的功能。

聽起來你已經有了解決方案,但有時知道還有什么可用(這些模塊都是標准庫的一部分,所以總是安裝)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM