日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python3 使用相对路径 import模块

發(fā)布時間:2024/3/13 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 使用相对路径 import模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄結構

.
├── apt_root.py
├── __init__.py
├── mod/
? ? └── test.py
? ? └── __init__.py
└── sub/
? ? └── test.py
? ? └── __init__.py

任務一:在mod/test.py中import 上級目錄下的apt_root.py

任務二:在mod/test.py中import 上級目錄的sub/test.py

?

前提

【為什么題目限定python3的import?】

因為網(wǎng)上能搜到的PEP都是python2的。例如PEP328。但是據(jù)我觀察,python2和python3的import規(guī)則不同。

【絕對路徑他不香嗎,為什么限定用相對路徑import模塊?】

通過絕對路徑引用模塊,容易造成在后續(xù)改變代碼結構,或者文件改名時,修改工作多的問題。而相對路徑?jīng)]有這個問題

?

解析

寫這篇文章的一個出發(fā)點,是我發(fā)現(xiàn)import并沒有很簡單,至少對我造成了很多混亂,因此在這里進行分享,希望能上面兩個任務能覆蓋所有困難情況。首先一個混亂,是用不同方式執(zhí)行test.py,其中的import能不能找到對應module是不同的。

用python test.py的方式

這時,在根目錄下執(zhí)行python mod/test.py ,

或者 進入mod子目錄再執(zhí)行python test.py的效果是一樣的。

用網(wǎng)上查到的這些方式都會報錯:

from . import apt_root # 或者 from .. import apt_root # 或者 from ..apt_root import *

我測試成功的寫法是這樣:

import syssys.path.append(".") import app_root

所以,應該一個‘.’是上一級目錄,兩個'.'是上兩級。意思是把上一級目錄加入搜索路徑。

用python -m test的方式

這種方式下,如果我的import是這樣:

import app_root

(和直接python xxx.py不同)在不同目錄下運行,會有不同效果!

一:在根目錄下:python -m mod.test——運行成功

二:先進入mod子目錄,再python -m test——運行失敗

如果要運行成功,則應該這樣:

sys.path.append("..") import app_root

(又一個造成混亂的)python -m xxx時,把上級目錄加入搜索路徑,要用"..",這和python xxx.py時,用"."代表上級目錄不同!

原因是python -m方式,會把當前運行命令的路徑添加至sys.path。參見[python]自問自答:python -m參數(shù)?

所以,這種方法下,一定要結合當前運行命令的路徑+默認sys.path中搜索路徑+代碼中sys.path.append新增路徑,才能判斷import是否能成功。

?

總結

容易造成混亂的地方:

1.相對路徑的使用不能用from .. import XX,而要用sys.path.append(“..”)

2.python -m xxx和python xxx.py對import的寫法中上級目錄表示不同,前者用兩個點,后者用一個點;

3.python -m xxx中import搜索路徑與當前執(zhí)行命令的目錄相關;

python xxx.py與當前執(zhí)行命令的目錄無關

?

?


【歡迎關注我的微信公眾號:人工智能Beta】

總結

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

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