簡體   English   中英

Python自定義模塊和導入

[英]Python custom module and import

我下面這個關於如何打包Python模塊的例子。 但是當我嘗試使用它時,使用 pip 安裝我構建的包,而以下工作。

from towel_stuff import towel_utils

x = towel_utils.has_towel()
print(x)

這也有效,

import towel_stuff.towel_utils

x = towel_stuff.towel_utils.has_towel()
print(x)

我不明白,為什么以下不起作用。

import towel_stuff

x = towel_stuff.towel_utils.has_towel()
print(x)

通常情況下,比如我們想使用os.path ,我們不需要寫import os.path ,只要import os就可以了。 那么,對於我構建的包,為什么我必須提供完整的包路徑?

當然,我可以使用from towel_stuff import *來導入所有內容,但是很好奇為什么我們不需要提供標准包的完整路徑。

鑒於以下結構:

towel_stuff
----__init__.py
----towel_utils

當您使用import towel_stuff ,執行的唯一文件是__init__.py ,因此如果您沒有在__init__.py導入towel_utils ,則根本無法訪問它。

簡而言之,當您使用import a_module ,您只是在執行該模塊目錄中的__init__.py文件。 如果要訪問a_module.file ,則需要顯式導入它。

當您使用import a_file ,您正在執行該文件,因為path只是os一個變量,因此您可以像os.path一樣訪問它。

所以,不同的是, path是在一個變量os ,而towel_utils是一個子模塊towel_stuff 或者讓我們說pathos一個導入模塊,這使它成為一個變量。

一般情況下,比如我們要使用os.path,不需要寫import os.path,只需要import os就可以了。 那么,對於我構建的包,為什么我必須提供完整的包路徑?

這完全取決於模塊的構造方式。 例如,如果在您的towel_stuff模塊中包含:

from towel_stuff import towel_utils

然后只導入towel_stuff代碼可以訪問towel_stuff.towel_utils而不需要額外的導入。

暫無
暫無

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

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