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

bbuxkriu  于 2022-10-23  发布在  Python
关注(0)|答案(5)|浏览(150)

在Python或Linux中,有没有基本上指示系统“安装任何必要的东西”的东西?基本上,我发现为我工作的每个新脚本/系统/服务器安装Python包很烦人。每次我都会做一个sudo pipapt-getdnf。为什么不在脚本本身中自动执行该操作。只要出现“找不到包”错误,就将库名称传递给INSTALL语句。这个就在那里吗?
PS:我知道docker的存在,但我说的是纯出于执行目的的Python/脚本级别或直接系统级别。

s3fp2yjn

s3fp2yjn1#

如何根据需要自动从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
lf3rwulv

lf3rwulv2#

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

col17t5w3#

在新计算机上安装自定义项目时,可以使用setupTools自动安装依赖项。如果您想要做的只是安装几个PyPI包,那么需求文件工作得很好。
Here是两者之间的一个很好的比较。从同一链接中可以看到,如果您的项目有两个依赖包AB,则在setp.py文件中只需包含一行

install_requires=[
   'A',
   'B'
]

当然,setuptools可以做更多的事情。您可以包括外部库(比如C文件)、非PyPI依赖项等的设置。文档提供了有关安装依赖项的详细概述。还有一个非常好的tutorial,介绍了如何开始使用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是如此简单。这个包可以非常容易地将代码迁移到一台新机器上。

goucqfw6

goucqfw64#

PIP3安装pipreqs

PIP3安装-U--用户pipreqs

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


CAT要求.txt

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

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

vof42yt1

vof42yt15#

自动要求.txt更新方式

我真的不太确定是否需要自动安装,但如果您停止使用requirements s.txt,有三种方法:
1.当我们需要部署时,在开发后生成Requirements s.txt。它由pip freeze > requirements.txtpipreqs执行,以减少混乱的结果。
1.每次安装后,手动将每个模块添加到Requirements s.txt中。
1.安装管理器,该管理器将为我们处理Requirements s.txt更新。
关于堆栈溢出,1-st选项有很多答案,2-d选项是不言而喻的,所以我想描述3-d方法。有一个名为to-requirements s.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/
1.gihub-https://github.com/VoIlAlex/requirements-txt
1.PYPI-https://pypi.org/project/to-requirements.txt/

相关问题