檔案結構如下
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...