簡體   English   中英

如何根據需要從 python 腳本自動安裝所需的包?

[英]How to automatically install required packages from a python script as necessary?

在 python 或 linux 中有什么東西基本上指示系統“安裝任何必要的東西”。 基本上我覺得為我工作的每個新腳本/系統/服務器安裝 python 包很煩人。 無論如何,每次我最終都會執行 sudo pip 或 apt-get 或 dnf。 為什么不在腳本本身內自動化。 無論何時出現“找不到包”錯誤,請將庫名稱傳遞給安裝語句。 這是在嗎?

PS:我知道 docker 存在,但我只是在 python/腳本級別或直接系統級別進行討論,純粹是為了執行目的。

謝謝

如何根據需要從 python 腳本自動安裝所需的包?

假設您的 Python 腳本是example.py

import os
import time
import sys
import fnmatch
import requests
import urllib.request
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool as ThreadPool 
print('test')

您可以使用pipreqs根據 Python 腳本包含的import語句自動生成一個requirements.txt文件。 要使用pipreqs ,假設您在example.py所在的目錄中:

pip install pipreqs
pipreqs .

它將生成以下requirements.txt文件:

requests==2.23.0
beautifulsoup4==4.9.1

您可以安裝:

pip install -r requirements.txt

我知道的最好方法是,創建一個文件requirements.txt列出其中的所有包名稱並使用pip安裝它

pip install -r requirements.txt

示例requirements.txt

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3
...

當您在新機器上安裝自定義項目時,您可以使用 setuptools 自動安裝依賴項。 如果您只想安裝一些PyPI包,需求文件就可以正常工作。

是兩者之間的一個很好的比較。 從同一個鏈接你可以看到,如果你的項目有兩個依賴包AB ,你必須在你的 setp.py 文件中包含一行

install_requires=[
   'A',
   'B'
] 

當然, setuptools可以做的更多。 您可以包括外部庫(例如 C 文件)、非 PyPI 依賴項等的設置。 文檔提供了有關安裝依賴項的詳細概述。 還有一個非常好的 Python 打包入門教程

從他們的例子來看,典型的 setup.py 文件看起來像這樣。

from setuptools import setup

setup(name='funniest',
      version='0.1',
      description='The funniest joke in the world',
      url='http://github.com/storborg/funniest',
      author='Flying Circus',
      author_email='flyingcircus@example.com',
      license='MIT',
      packages=['funniest'],
      install_requires=[
          'markdown',
      ],
      zip_safe=False)

總之,開始使用setuptools非常簡單。 這個包可以很容易地將你的代碼遷移到新機器上。

pip3 安裝 pipreq

pip3 install -U --user pipreqs

mv requirements.txt  requirements.txt.orig
pipreqs --force ./

貓需求.txt

Keras==2.2.4 
scipy==1.3.0 
numba==0.44.1 
imgaug==0.2.9 
opencv_python==4.1.0.25

但是,有些模塊需要二進制編譯(您沒有庫),有些可以由系統包管理器使用不同的名稱安裝。

自動requirements.txt更新方法

我不太確定自動安裝什么是必要的,但如果你停止使用requirements.txt ,有 3 種方法:

  1. 開發后生成requirements.txt,當我們要部署的時候。 它由pip freeze > requirements.txtpipreqs執行,以減少混亂的結果。
  2. 每次安裝后手動將每個模塊添加到 requirements.txt。
  3. 安裝管理器將為我們處理 requirements.txt 更新。

stackoverflow 上的 1-st 選項有很多答案,2-d 選項不言自明,所以我想描述 3-d 方法。 有一個名為to-requirements.txt的庫。 要安裝它,請鍵入:

pip install to-requirements.txt  # Pip install to requirements.txt

如果您一次閱讀整個命令,您會看到它的作用。 安裝后你應該設置它。 跑:

requirements-txt setup

它會覆蓋 pip 腳本,以便每個pip installpip uninstall使用所需版本的包自動更新項目的 requirements.txt 文件。 覆蓋是安全的,因此在卸載此包后,pip 將表現正常。

您可以自定義它的工作方式。 比如全局禁用,只對需要的目錄激活,只對git倉庫激活,或者如果不存在則允許/禁止創建requirements.txt文件。

鏈接:

  1. 文檔 - https://requirements-txt.readthedocs.io/en/latest/
  2. GitHub - https://github.com/VoIlAlex/requirements-txt
  3. PyPI - https://pypi.org/project/to-requirements.txt/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM