日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python相对引用_Python 模块相对引用

發布時間:2024/9/27 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python相对引用_Python 模块相对引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件結構如下

python_directory/

├── __init__.py

└── app

├── __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]。

Relative Import In Non-Package

如果直接執行一個模塊,那么它的 __name__ 為 __main__。Python 會認為這個模塊是一個最頂層的模塊,而不管這個模塊在文件系統中的實際位置[1]。

$ pwd

/path_to/python_directory

$ python app/sub1/mod1.py

__name__: __main__

__package__: None

Traceback (most recent call last):

File "app/sub1/mod1.py", line 3, in

from ..sub2 import mod2

ValueError: Attempted relative import in non-package

一個最頂層的模塊 -- 我理解為 Python 把這個模塊復制到在一個單獨的目錄中然后再執行,由于該目錄下只有這個一個模塊, 所以它不是一個 package。

Beyond Top Level Package

$ pwd

/path_to/python_directory/app

$ 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

File "/path_to/python_directory/app/sub1/mod1.py", line 4, in

from ..sub2 import mod2

ValueError: Attempted relative import beyond toplevel package

由于 -m sub1.mod1,Python 將 package 的頂層視為 sub1,而 ..sub2 位于 app/,超過了當前的最頂層 sub1,所以報錯。

└── app

├── __init__.py

├── sub1

│?? ├── __init__.py

│?? └── mod1.py

└── sub2

正確的調用

$ pwd

/path_to/python_directory

$ python -m app.sub1.mod1

__name__: __main__

__package__: app.sub1

Import Successfully!

此時 ..sub2 相當于 app.sub2。

參考

總結

以上是生活随笔為你收集整理的python相对引用_Python 模块相对引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。