最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中的路徑問(wèn)題

 更新時(shí)間:2020年09月02日 08:36:38   作者:張志強(qiáng)  
這篇文章主要介紹了Python中的路徑問(wèn)題,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

1. 絕對(duì)路徑引入

Python 在搜索模塊時(shí),依次搜索sys.path里的位置,直到找到模塊為止。下面命令可以查看當(dāng)前的搜索路徑:

import sys
print(sys.path)

sys.path的初始值來(lái)源于兩個(gè)(其實(shí)還有一些更復(fù)雜但不常用的)。一個(gè)是系統(tǒng)的PYTHONPATH變量,因此可通過(guò)設(shè)置該變量,來(lái)設(shè)置 Python 默認(rèn)的搜索位置。比如:

export PYTHONPATH=/opt/python:$PYTHONPATH
echo $PYTHONPATH

將該命令放在系統(tǒng)初始化腳本(/etc/environment)或者 BASH 初始化腳本(/~/.bashrc)里,可以對(duì)每個(gè)新開(kāi)的窗口有效。

sys.path的另一個(gè)來(lái)源是當(dāng)前執(zhí)行程序所在的目錄 (而不是當(dāng)前目錄)。比如當(dāng)前目錄下文件夾./cc下有一個(gè)b.py,那么執(zhí)行./cc/b.py時(shí),./cc(而不是./!)將被加到sys.path

python ./cc/b.py

2. 相對(duì)路徑引用

上面說(shuō)的是搜索模塊都是指絕對(duì)路徑引用。對(duì)于非系統(tǒng)目錄,就需要操縱sys.path。但操縱sys.path有外溢效果,因?yàn)樗且粋€(gè)全局變量。對(duì)于同一個(gè)庫(kù)里的模塊的互相引用,可以考慮使用相對(duì)路徑:

from . import abc
from .abc import fool
from ..up import foo

但相對(duì)路徑有兩個(gè)很惡心的問(wèn)題,使得用法極為受限。其中一個(gè)是:

Note that both explicit and implicit relative imports are based on the name of the current module. Since the name of the main module is always __main__, modules intended for use as the main module of a Python application should always use absolute imports.

包含相對(duì)路徑 import 的 python 腳本不能直接運(yùn)行,只能作為 module 被引用。原因正如手冊(cè)中描述的,所謂相對(duì)路徑其實(shí)就是相對(duì)于當(dāng)前 module 的路徑,但如果直接執(zhí)行腳本,這個(gè) module 的 name 就是__main__, 而不是 module 原來(lái)的 name , 這樣相對(duì)路徑也就不是原來(lái)的相對(duì)路徑了,導(dǎo)入就會(huì)失敗。

在使用相對(duì)引用的文件中,不能有 __main__ 方法,只執(zhí)行作為一個(gè) module 進(jìn)行引用,而不是直接執(zhí)行腳本。

舉個(gè)簡(jiǎn)單例子。假設(shè)./cc/目錄下已有一個(gè)./cc/b.py(內(nèi)容為空)。當(dāng)前目錄下的./a.py內(nèi)容為:

from .cc import b

那么直接運(yùn)行python ./a.py將會(huì)報(bào)錯(cuò):

ModuleNotFoundError: No module named '__main__.cc'; '__main__' is not a package

另一個(gè)是常見(jiàn)的錯(cuò)誤是: ValueError: attempted relative import beyond top-level package。

在涉及到相對(duì)導(dǎo)入時(shí),package所對(duì)應(yīng)的文件夾必須正確的被python解釋器視作package,而不是普通文件夾。否則由于不被視作package,無(wú)法利用package之間的嵌套關(guān)系實(shí)現(xiàn)python中包的相對(duì)導(dǎo)入。

  文件夾被python解釋器視作package需要滿足兩個(gè)條件:

  1、文件夾中必須有__init__.py文件,該文件可以為空,但必須存在該文件。

  2、不能作為頂層模塊來(lái)執(zhí)行該文件夾中的py文件(即不能作為主函數(shù)的入口)。

  補(bǔ)充:在"from YY import XX"這樣的代碼中,無(wú)論是XX還是YY,只要被python解釋器視作package,就會(huì)首先調(diào)用該package的__init__.py文件。如果都是package,則調(diào)用順序是YY,XX。

  另外,練習(xí)中“from . import XXX”和“from .. import XXX”中的'.'和'..',可以等同于linux里的shell中'.'和'..'的作用,表示當(dāng)前工作目錄的package和上一級(jí)的package。

  舉個(gè)例子:

  testIm/

  --__init__.py

  --main.py : from Tom import tom

  --Tom/

    --__init__.py : print("I'm Tom's __init__!")

    --tom.py : from . import tomBrother, from .. import kate,print("I'm Tom!")

    --tomBrother.py print(I'm Tom's Brother!)

  --Kate/

    --__init__.py : print("I'm Kate's __init__!")

    --kate.py

  運(yùn)行文件:main.py

  結(jié)果:

I'm Tom's __init__!
I'm Tom's Brother!
Traceback (most recent call last):
File "D:\PythonLearning\TestIm\main.py", line 3, in <module>
from Tom import tom
File "D:\PythonLearning\TestIm\Kate\kate.py", line 4, in <module>
from .. import kate
ValueError: attempted relative import beyond top-level package
>>>

可以看到from . import tomBrother順利執(zhí)行,首先執(zhí)行了Tom文件夾下的__init__.py文件,后來(lái)執(zhí)行了tomBrother.py文件,但是當(dāng)執(zhí)行到“from .. import kate”時(shí)報(bào)錯(cuò),這是因?yàn)槲覀兪窃赥estIm文件夾下把main.py文件作為主函數(shù)的入口執(zhí)行的,因此盡管TestIm文件夾中有__init__.py文件,但是該文件夾不能被python解釋器視作package,即Tom package不存在上層packge,自然會(huì)報(bào)錯(cuò),相對(duì)導(dǎo)入時(shí)超出了最高層級(jí)的package。

修改方法:

  test/

  --main.py : from testIm.Tom import tom

  --testIm/

    --__init__.py

    --Tom/

      --__init__.py : print("I'm Tom's __init__!")

      --tom.py : from . import tomBrother, from .. import Kate,print("I'm Tom!")

      --tomBrother.py print(I'm Tom's Brother!)

    --Kate/

    --__init__.py : print("I'm Kate's __init__!")

    --kate.py

  運(yùn)行文件:main.py

結(jié)果:  

I'm top's __init__!
I'm Tom's __init__!
I'm Tom's Brother!!
I'm Kate's __init__!
I'm Tom!

即主函數(shù)入口不在TestIm中,則TestIm和其同樣包含__init__.py文件的子文件夾都被python解釋器視作package,形成相應(yīng)的嵌套關(guān)系??梢哉J褂胒rom . import XXX和from .. import XXX。

以上就是詳解Python中的路徑問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于Python 路徑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python中刪除某個(gè)元素的方法解析

    python中刪除某個(gè)元素的方法解析

    這篇文章主要介紹了python中刪除某個(gè)元素的方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python實(shí)現(xiàn)將數(shù)據(jù)框數(shù)據(jù)寫(xiě)入mongodb及mysql數(shù)據(jù)庫(kù)的方法

    Python實(shí)現(xiàn)將數(shù)據(jù)框數(shù)據(jù)寫(xiě)入mongodb及mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將數(shù)據(jù)框數(shù)據(jù)寫(xiě)入mongodb及mysql數(shù)據(jù)庫(kù)的方法,結(jié)合具體實(shí)例形式分析了Python針對(duì)mongodb及mysql數(shù)據(jù)庫(kù)的連接、寫(xiě)入等操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-04-04
  • 教你怎么用Python監(jiān)控愉客行車程

    教你怎么用Python監(jiān)控愉客行車程

    這篇文章主要介紹了教你怎么用Python監(jiān)控愉客行車程,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python項(xiàng)目管理的利器Poetry的使用

    Python項(xiàng)目管理的利器Poetry的使用

    在?Python?項(xiàng)目開(kāi)發(fā)中,包管理、依賴管理和虛擬環(huán)境的創(chuàng)建一直是開(kāi)發(fā)者們經(jīng)常面對(duì)的難題,本文主要介紹了Python項(xiàng)目管理的利器Poetry的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Python可視化學(xué)習(xí)之seaborn繪制矩陣圖詳解

    Python可視化學(xué)習(xí)之seaborn繪制矩陣圖詳解

    矩陣圖即用一張圖繪制多個(gè)變量之間的關(guān)系,數(shù)據(jù)挖掘中常用于初期數(shù)據(jù)探索。本文介紹python中seaborn.pairplot和seaborn.PairGrid繪制矩陣圖,需要的可以參考一下
    2022-02-02
  • windows下python安裝pip圖文教程

    windows下python安裝pip圖文教程

    這篇文章主要為大家詳細(xì)介紹了windows下python安裝pip圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python list刪除元素時(shí)要注意的坑點(diǎn)分享

    python list刪除元素時(shí)要注意的坑點(diǎn)分享

    下面小編就為大家分享一篇python list刪除元素時(shí)要注意的坑點(diǎn)分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python打包成exe文件的詳細(xì)操作指南

    Python打包成exe文件的詳細(xì)操作指南

    Python越來(lái)越被大家所關(guān)注,隨著越來(lái)越多的人開(kāi)始學(xué)習(xí)Python代碼大家其實(shí)或多或少都會(huì)遇到一些問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python打包成exe文件的詳細(xì)操作,需要的朋友可以參考下
    2022-06-06
  • 使用Python腳本從文件讀取數(shù)據(jù)代碼實(shí)例

    使用Python腳本從文件讀取數(shù)據(jù)代碼實(shí)例

    這篇文章主要介紹了使用Python腳本從文件讀取數(shù)據(jù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    本文主要介紹了Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

樟树市| 桦甸市| 从江县| 德州市| 保靖县| 海宁市| 林州市| 民权县| 平江县| 南康市| 舒兰市| 横山县| 辰溪县| 乐清市| 延川县| 三河市| 彭山县| 长兴县| 霍林郭勒市| 叶城县| 哈密市| 定南县| 武邑县| 阳春市| 泽普县| 监利县| 威宁| 柞水县| 报价| 和林格尔县| 连平县| 灵石县| 仙游县| 资中县| 彝良县| 延庆县| 汤阴县| 桐柏县| 永新县| 玉屏| 漳平市|