gpt4 book ai didi

python - 如果需要的话安装一个库

转载 作者:行者123 更新时间:2023-12-02 06:39:47 27 4
gpt4 key购买 nike

我想向一位同学发送一段令我感到自豪的简短代码,并意识到他将无法运行它,因为他没有理由安装该库。安装当然非常简单 - 但我意识到这种情况可能经常发生,主要是对于初学者 - 想为其构建一个简单的功能:

def smart_import(package_name):
try:
import package_name
except ImportError:
import pip
pip.main(['install', package_name])

问题是我真的不知道如何将包的名称作为可以通过 import 调用的值传递想过将字符串转换回来,但这似乎比我想象的更复杂

最佳答案

出于多种原因,这是一个坏主意,主要原因是人们通常不希望 Python 函数调用自动尝试在他们的计算机上安装软件。

此方法还存在一些其他问题:

  • 导入名称并不总是与发行版名称相对应。例如,dateutil 模块由 python-dateutil 发行版提供。
  • 如果您尝试从另一个模块使用 smart_import,则会将名称导入到错误的命名空间中。
  • 某些发行版会导出多个顶级导入,例如setuptools 提供 setuptoolseasy_installpkg_resources
  • 在某些情况下,pip 本身可能未安装。
  • 该脚本可能没有安装软件包的权限。
  • 用户可能希望使用 --user 将发行版显式安装到其主目录中,而您的脚本本身无法知道这一 pip 。
  • pip 的调用可能需要更改,具体取决于您是否位于 virtualenv 中。
  • 安装可能会尝试引入依赖项,从而导致与用户安装的其他发行版发生冲突。
  • IDE 可能看不到动态导入的模块,并且可能会用波浪线强调其随后用作无法解析的名称。

该怎么做:

将您的代码打包到它自己的发行版中。编写一个 setup.py,其中在 setup 调用中使用 install_requires 参数提及依赖项。让你的同学pip install mypackage,依赖项将在安装时而不是运行时收集。您可以将您的发行版直接发送给他们(作为 mypackage-0.1.tar.gz 文件或 wheel )。或者您可以将其上传到索引,例如 test pypi .

Python Packaging User Guide是一个适合初学者的资源,描述如何创建和上传您自己的发行版。

关于python - 如果需要的话安装一个库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49651523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com