Python 模組相對引用

2022-01-29 13:08:19 字數 1891 閱讀 8266

檔案結構如下

python_directory/

├── __init__.py

├── __init__.py

├── sub1

│   ├── __init__.py

│   └── mod1.py

└── sub2

├── __init__.py

├── mod2.py

除了 mod1.py,其他檔案內容都為空。

mod1.py

print('__name__: {}'.format(__name__))

print('__package__: {}'.format(__package__))

from ..sub2 import mod2

print('import successfully!')

如果__package__不為空,相對引用會根據__package__而不是__name__[2]。

如果直接執行乙個模組,那麼它的__name____main__。python 會認為這個模組是乙個最頂層的模組,而不管這個模組在檔案系統中的實際位置[1]。

$ pwd

/path_to/python_directory

__name__: __main__

__package__: none

traceback (most recent call last):

valueerror: attempted relative import in non-package

乙個最頂層的模組-- 我理解為 python 把這個模組複製到在乙個單獨的目錄中然後再執行,由於該目錄下只有這個乙個模組,

所以它不是乙個 package。

$ pwd

$ python -m sub1.mod1

__name__: __main__

__package__: sub1

traceback (most recent call last):

file "/usr/local/cellar/python/2.7.13/frameworks/python.framework/versions/2.7/lib/python2.7/runpy.py", line 174, in _run_module_as_main

"__main__", fname, loader, pkg_name)

file "/usr/local/cellar/python/2.7.13/frameworks/python.framework/versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code

exec code in run_globals

valueerror: attempted relative import beyond toplevel package

├── __init__.py

├── sub1

│   ├── __init__.py

│   └── mod1.py

└── sub2

$ pwd

/path_to/python_directory

__name__: __main__

import successfully!

pep 328 -- imports: multi-line and absolute/relative

pep 366 -- main module explicit relative imports

python的相對引用問題

遇到乙個坑,import相對路徑引起的。我有乙個如下的檔案結構 test init py 此檔案為空,代表test是乙個package m1.py m2.pym1.py檔案內容如下 m1.py a 1我想在m2.py檔案中使用m1的變數,內容如下 m2.py from m1 import a b a...

python 模組引用 python如何引用模組

模組實際上就是 以.py為結尾的檔案 注意點 自定義的模組盡量不要和系統模組重名 模組內部封裝了很多實用的功能,有時在模組外部呼叫就需要將其匯入,匯入模組簡單劃分,實際上就只有兩種 import from import 詳細一點劃分有五種 1,improt 模組名 呼叫 模組名.功能名 2,impo...

git 相對引用

通過雜湊值指定提交記錄很不方便,所以 git 引入了相對引用。使用相對引用的話,你就可以從乙個易於記憶的地方 比如bugfix 分支或 head 開始計算。下面介紹兩個簡單的用法 使用 向上移動 1 個提交記錄 使用 向上移動多個提交記錄,如 3 1.操作符 把這個符號加在引用名稱的後面,表示讓 g...