如何根据需要从python脚本自动安装所需的包?

时间:2017-09-26 06:52:22

标签: python linux ubuntu pip fedora

python或linux中有什么东西基本上指示系统安装必要的东西"。基本上我发现为我工作的每个新脚本/系统/服务器安装python包很烦人。每当我最终做一个sudo pip或apt-get或dnf时。为什么不在脚本本身内自动化。如果找不到包裹,如果出现错误,请将库名称传递给install语句。这是吗?

PS:我知道docker存在,但我正在谈论python /脚本级别或直接系统级别,纯粹是为了执行目的。

由于

4 个答案:

答案 0 :(得分:6)

我知道的最好方法是,创建一个文件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
...

答案 1 :(得分:3)

如何根据需要自动从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脚本包含的requirements.txt语句自动生成import文件。要使用pipreqs,请假设您位于example.py所在的目录中:

pip install pipreqs
pipreqs .

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

requests==2.23.0
beautifulsoup4==4.9.1

您可以通过以下方式安装:

pip install -r requirements.txt

答案 2 :(得分:1)

在新计算机上安装自定义项目时,可以使用setuptools自动安装依赖项。如果您只想安装一些PyPI软件包,那么需求文件就可以正常运行。

Here两者之间的比较很好。在同一个链接中,您可以看到,如果您的项目有两个依赖包AB,那么您在setp.py文件中包含的所有内容都是一行

install_requires=[
   'A',
   'B'
] 

当然,setuptools可以做得更多。您可以包含外部库(例如C文件),非PyPI依赖项等的设置。documentation提供有关安装依赖项的详细概述。开始使用python包装时,还有一个非常好的tutorial

从他们的示例中,典型的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非常简单。这个包可以很容易地将代码迁移到新机器。

答案 3 :(得分:0)

pip3安装pipreqs

pip3 install -U --user pipreqs

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

  

cat requirements.txt

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

但是,有些模块需要二进制编译(您没有库),有些可以由系统软件包管理器以不同的名称安装。