多個Python項目怎么調(diào)用我自己的工具函數(shù)?
在多年寫代碼的過程中,我總結(jié)了不少常用的工具函數(shù)。這些工具函數(shù)有的能夠?qū)崿F(xiàn)快速重試網(wǎng)絡(luò)請求,有的可以把任意格式的時間轉(zhuǎn)成標(biāo)準(zhǔn)格式,還有的可以自動生成正則表達(dá)式。
我把這些工具函數(shù)分別放到多個.py文件中。然后把這些.py文件放在一個叫做my_awesome_util的文件夾中。
由于我沒有把這些代碼上傳到Pypi或者Github,因此我每次在新的項目中要使用時,都要把my_awesome_util文件夾復(fù)制到新的項目中,非常麻煩,而且會形成大量的重復(fù)代碼。
有沒有什么辦法,能讓新開的項目直接就能導(dǎo)入這些工具函數(shù)呢?就像導(dǎo)入官方模塊import time一樣,如果我要使用時間相關(guān)的工具函數(shù),我只需要import time_util就可以了。
首先要排除的方法,就是手動在代碼里面,通過sys.path添加文件夾。因為這個方法需要在每個項目的入口文件中增加兩行代碼,無法做到全自動。
今天的方法,是在Python的site-packages文件夾中做文章。相信很多同學(xué)都知道,任何放到site-packages文件夾里面的.py文件或者文件夾,都可以在Python中直接導(dǎo)入:
看到這里,肯定有同學(xué)要問,那是不是把my_awesome_util文件夾整個復(fù)制到site-packages文件夾中呢?
當(dāng)然不是的。因為我的工具包里面的代碼是在持續(xù)演進(jìn)的,我會經(jīng)常更新里面的代碼,放到site-packages里面以后,代碼修改起來很不方便。
我們要用到的,是Python的一個特性,叫做.pth文件。在site-packages文件夾中,任意創(chuàng)建一個.pth文件。文件名可以隨便取,只要不跟已有的模塊沖突就可以了。例如叫做xxxx.pth。這個文件里面只有一行,就是my_awesome_util文件夾的絕對路徑。例如:
現(xiàn)在,我在任何一個文件夾中啟動Python,直接就可以導(dǎo)入my_awesome_util文件夾中的任何.py文件:
.pth文件可以有很多行,每行一個文件夾的絕對路徑,就可以讓Python同時導(dǎo)入這些文件夾里面的所有.py文件。
有時候,我們的電腦上有多個虛擬環(huán)境。A環(huán)境有pandas,沒有pymongo;B環(huán)境有pymongo,但沒有pandas。現(xiàn)在我在B環(huán)境里面要寫一段代碼,既需要pandas,又需要pymongo怎么辦呢?如果不想重新安裝,我可以把A環(huán)境的site-packages文件夾的絕對路徑,寫入到一個.pth文件中,然后把這個文件存放到B環(huán)境的site-packages文件夾中。這樣,我就可以在B環(huán)境里面直接使用A環(huán)境中的所有第三方庫了。
有同學(xué)會問,怎么知道site-packages文件夾在哪里呢?其實只需要執(zhí)行下面兩行代碼就能查詢到:
>>> import sysconfig
>>> print(sysconfig.get_path('purelib'))
運(yùn)行效果如下圖所示: