成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

小問題大隱患:如何正確設(shè)置 Python 項目的入口文件?

開發(fā) 后端
如果僅僅從技術(shù)上來說,你非要導(dǎo)入 bin 文件夾的父文件夾下面的其他模塊,也并不困難,我在一日一技:導(dǎo)入父文件夾中的模塊并讀取當前文件夾內(nèi)的資源一文中講到了具體的做法。

 [[382118]]

今天在公眾號粉絲群里面,有一位同學提到了 Python 找不到模塊的問題:

問題涉及到的代碼結(jié)構(gòu)和代碼截圖如下:

這個問題的解決方法非常簡單,就是把start.py文件從bin文件夾移出來就好了。

但如果對這個問題進一步分析,可以看到更多問題。

在我以前的文章:為什么Python代碼能運行但是PyCharm給我畫紅線?中,我講到了工作區(qū)(Workdir)對代碼的影響。PyCharm、VSCode 識別的工作區(qū),可能并不等于你直接在終端窗口運行.py文件時候的工作區(qū)。

今天這個問題本質(zhì)上也是工作區(qū)導(dǎo)致的問題。這個同學的項目根目錄是MY_API,所以他使用的編輯器VSCode 就會默認把MY_API當做工作區(qū)。所以,當他在start.py文件中寫上from lib.interface import server時,VScode 并不會給他標記紅色波浪線。因為從 VSCode 的視角看,lib文件夾確實就是在工作區(qū)下面的。

但是,當他在 VSCode 里面運行這個start.py文件時,Python 是從bin文件夾下面運行的。此時,Python 會把bin文件夾當做工作區(qū)。在工作區(qū)里面就只有這一個start.py文件,所以當然找不到lib文件夾。

如果僅僅從技術(shù)上來說,你非要導(dǎo)入 bin 文件夾的父文件夾下面的其他模塊,也并不困難,我在一日一技:導(dǎo)入父文件夾中的模塊并讀取當前文件夾內(nèi)的資源一文中講到了具體的做法。

但問題在于,你不應(yīng)該這樣做。你不應(yīng)該把項目的入口文件,放到項目內(nèi)部很深的文件夾中。

所謂入口文件,就是要首先經(jīng)過它,才能到達其他的文件。當你拿到一個 Python 項目,你只需要首先從入口文件開始閱讀代碼,根據(jù)入口文件調(diào)用的模塊,一路看下去,你就能讀到它的所有實現(xiàn)邏輯。

但如果大家經(jīng)常逛 Github,就會發(fā)現(xiàn),有些人可能是被其他垃圾語言污染了思想,他的 Python 項目,根目錄有五六個文件夾和七八個.py文件。你拿到這個項目的時候,你甚至不知道,當你想運行這個代碼的時候,python3 xxx.py應(yīng)該運行哪個文件。你多方打聽,或者看了半天文檔,才知道,哦,原來入口文件在com/xx/yy/zz/script/run.py。

當你打開這個run.py文件,你發(fā)現(xiàn)它的頂部,文件導(dǎo)入的代碼寫的是from ../../../../aaa import bbb。

簡直是神經(jīng)病寫法。我知道有些垃圾語言流行這樣寫。但現(xiàn)在你用的是 Python,學聰明一點,別那樣寫。

對于一個 Python 項目來說,入口文件應(yīng)該始終在最外層。例如:

當你要啟動這個項目的時候,直接在最外層python3 main.py,就能把它啟動起來。在main.py里面,你可以導(dǎo)入其他模塊,然后調(diào)用其他模塊里面的類或者函數(shù)。

這樣做的好處是什么?這樣做,你是在項目的根目錄啟動的這個項目,所以你的工作區(qū)就是項目的根目錄。那么你在任何一個.py文件里面都可以很容易地基于工作區(qū)導(dǎo)入任意其他文件。例如,你現(xiàn)在在models/mongo-util/mongob_helper.py文件中,你想導(dǎo)入utils/abc.py中的time_format()函數(shù),那么,你只需要這樣寫就可以了。

  1. from utils.abc import time_format 

你根本不可能出現(xiàn)需要導(dǎo)入父文件夾中的某個模塊的情況。

只有工具腳本,才需要單獨使用一個文件夾來存放,然后調(diào)用父文件夾中的其他文件。例如,我現(xiàn)在有一個工具腳本,它每天晚上0點會讀寫 MongoDB,清理無效數(shù)據(jù),那么此時,我可以在根目錄單獨創(chuàng)建一個script或tools或者bin文件夾,然后把工具腳本放進去,例如:

在這個工具腳本里面,你可能會調(diào)用models/mongo-util/mongob_helper.py文件中的某個函數(shù)。這種情況下,你調(diào)用父文件夾中的內(nèi)容是可以接受的。但這畢竟只是工具腳本。

可能還有同學要問,那如果我的項目是一個 Python 的包,它本身沒有入口文件怎么辦呢?這個時候,你可以把這個包的__init__.py當做它的入口文件。大家可以參考我在 GitHub - kingname/GeneralNewsExtractor: 新聞網(wǎng)頁正文通用抽取器 Beta 版.[1]的代碼組織結(jié)構(gòu)。在項目根目錄留下一個example.py文件,用來演示如何調(diào)用這個包。而這個包本身的代碼,是在一個叫做gne的文件夾中的。這個gne文件夾是一個包,它的入口文件在__init__.py中。

各位,當你寫代碼的時候,你先想一想,如果別人拿到了你的代碼,想要梳理一下這個項目的邏輯,在不詢問你的情況下,怎么讓他知道應(yīng)該從哪個文件開始讀?應(yīng)該按什么順序讀?他能不能輕易地看到數(shù)據(jù)在你的代碼中是怎么運轉(zhuǎn)的?

參考資料

[1]GitHub - kingname/GeneralNewsExtractor: 新聞網(wǎng)頁正文通用抽取器 Beta 版.: https://github.com/kingname/GeneralNewsExtractor

本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關(guān)推薦

2010-07-05 09:56:37

2022-08-02 09:56:47

入口文件代碼

2011-07-04 09:39:31

項目管理

2009-12-07 09:45:23

PHP上傳大文件設(shè)置

2018-07-26 11:35:20

WindowsWindows 10修復(fù)

2021-09-13 12:45:08

Ubuntu 20.0PythonLinux

2021-09-14 21:29:01

項目環(huán)境變量

2021-09-13 09:52:11

Python項目連接器

2020-08-23 12:00:54

VDI虛擬桌面虛擬化

2010-02-24 09:47:05

Python 源文件

2020-08-25 07:16:20

Python資源文件文件

2020-04-29 14:37:24

JavaScript前端技術(shù)

2024-11-19 15:22:37

2020-08-07 11:46:47

JavaScript開發(fā)代碼

2023-10-21 20:50:00

Python項目PyCharm

2023-08-31 22:12:51

低代碼隱患技術(shù)

2018-04-11 15:42:04

開源項目姿勢

2010-02-22 15:26:57

Python對象

2015-07-07 10:11:39

GitHub項目流行度

2009-02-04 15:55:31

敏捷開發(fā)敏捷項目項目經(jīng)理
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 婷婷成人在线 | 午夜精品一区二区三区在线视频 | 久久久久久女 | 中文字幕在线一区 | 天天天操 | 久久中文字幕一区 | 7777精品伊人久久精品影视 | 久久午夜精品福利一区二区 | 免费精品 | 人人干人人干人人干 | 精品欧美一区二区在线观看视频 | 日韩精品在线播放 | 久久99视频| 精品久久国产 | 超级碰在线 | 亚洲国产精品一区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 欧美成人精品一区二区男人看 | 男女激情网站免费 | 狠狠爱免费视频 | 中文字幕中文字幕 | 久久亚洲国产精品 | 古装三级在线播放 | 谁有毛片 | 欧美一区二区三区的 | 免费一看一级毛片 | www狠狠干| 黄色一级大片在线免费看产 | 麻豆精品国产91久久久久久 | 九九综合| 精品欧美二区 | 日本色婷婷 | 国产精品久久欧美久久一区 | 91亚洲精品久久久电影 | 久久国产精品网站 | 国产在线视频在线观看 | 成人免费高清 | 欧美色专区 | 在线视频中文字幕 | 麻豆久久久久 | 在线a视频网站 |