【程式工具】5種自動儲存python requirements.txt方法

一般在github上看到別人開發的專案,都可以用git clone方式把人家分享的程式碼下載下來,但是在執行程式碼的時候常會發現不是相關的套件沒有安裝,就是已安裝的套件版本不相容,這時候就需要依賴requirements.txt這個檔案來幫助我們建立正確的執行環境,最後安裝的步驟建議在一個全新的虛擬環境下操作,以免害你電腦裡面的環境被汙染囉。

requirements.txt介紹

requirements.txt是一個簡單的文字檔,裡面會記錄每個使用到的套件以及版本,其目的和用途有三點:

  1. 方便管理requirements.txt可以明確指定開發項目當中所有需要的的外部Python套件和版本,可以避免因為版本差異導致的相容性問題。
  2. 方便協作:當新的開發人員加入專案或者在多個環境間部署專案時,可以輕鬆設定有相同Python套件和版本的開發環境。
  3. 自動化整理:當requirements.txt被儲存下來後,就可以使用自動化工具來安裝在本地端的環境當中。

自動儲存requirements.txt的5種方法

1. freeze

使用 pip freeze,可以快速將當前 Python 環境中所有安裝的套件和其版本輸出到requirements.txt中,缺點是會將整個環境下的套件都記錄下來。

pip freeze > requirements.txt

2. pipreqs

它不僅基於當前環境,而是根據您的項目文件夾中實際使用的導入來生成 requirements.txt 文件。這有助於避免將未在項目中使用的包加入到 requirements.txt 中。

首先安裝pipreqs

pip install pipreqs

接著進入到你的開發專案跟目錄底下(Prompt),並將當前工作目錄移動到上一級目錄,也就是進入到’C:\User\user’目錄下方

cd C:\User\user\Projects
cd ..

最後執行pipreqs,搜尋Projects目錄下所有的套件和版本,並儲存到目錄下方

pipreqs Projects\

成功儲存應該會顯示以下

INFO: Successfully saved requirements file in Projects\requirements

3. conda

使用conda直接管理Python環境,就是打開Anaconda Prompt(anaconda3),可以將當前環境的所有套件存到requirements.txt

conda list --export > requirements.txt

或是希望儲存成一個conda 的標準環境,導出一個 .yml 文件,可以用下面的程式碼儲存出來

conda env export > environment.yml

4. pip-tools

pip-tools 是管理命令字元的工具,其中的 pip-compile 命令可以存出一個精確、按照字母排序的 requirements.txt 文件,一樣要先安裝(pip)才可以執行唷!

pip install pip-tools
pip-compile

5. 自己寫一個小程式儲存requirements.txt

我們只要把想儲存套件版本的python檔案寫在save_package_versions(”)的括弧裡面,就能夠直接紀錄下當前環境當中有使用到的套件版本,程式碼放在我的colab

import pkg_resources

def get_imports(filepath):
    imports = set()
    with open(filepath, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        for line in lines:
            line = line.strip()
            if line.startswith('import') or line.startswith('from'):
                parts = line.split()
                if parts[0] == 'import':
                    imports.add(parts[1].split('.')[0])
                elif parts[0] == 'from':
                    imports.add(parts[1].split('.')[0])
    return imports

def save_package_versions(filepath):
    imports = get_imports(filepath)
    installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
    with open("requirements.txt", "w") as f:
        for imp in imports:
            if imp in installed_packages:
                f.write(f"{imp}=={installed_packages[imp]}\n")
            else:
                f.write(f"{imp}: Package not found or no version available\n")

# 儲存requirements.txt範例
save_package_versions('test.py')

安裝requirements.txt

學會了種不同方法來存儲requirements.txt,接下來要學如何正確載入requirements.txt到我們的環境當中,很簡單的方式就是用pip方法直接安裝到一個新的的環境當中

pip install -r requirements.txt

這樣就完成囉~

可以開始執行專案的程式碼啦!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *