Python 如有必要,请安装库
我想向一位同学发送一段我引以为傲的短代码,他意识到他无法运行它,因为他没有理由安装这个库。 安装当然非常简单-但我意识到这可能经常发生,主要是初学者-想要为它构建一个简单的功能:Python 如有必要,请安装库,python,pip,python-import,Python,Pip,Python Import,我想向一位同学发送一段我引以为傲的短代码,他意识到他无法运行它,因为他没有理由安装这个库。 安装当然非常简单-但我意识到这可能经常发生,主要是初学者-想要为它构建一个简单的功能: def smart_import(package_name): try: import package_name except ImportError: import pip pip.main(['install', package_name]) 问题是
def smart_import(package_name):
try:
import package_name
except ImportError:
import pip
pip.main(['install', package_name])
问题是,我真的不知道如何将包的名称作为可以通过导入调用的值传递
考虑过将字符串转换回来,但这似乎比我想的更复杂,这是一个坏主意,原因有很多,主要原因是人们通常不希望Python函数调用自动尝试在他们的机器上安装软件 此方法还存在一些其他问题:
- 导入名称并不总是与分发名称相对应。例如,
发行版提供了pythondateutil
模块dateutil
- 如果尝试从另一个模块使用
,则会将名称导入错误的命名空间smart\u import
- 一些发行版导出多个顶级导入,例如
提供setuptools
,setuptools
,以及easy\u install
pkg\u资源
- 在某些情况下,
本身可能无法安装pip
- 脚本可能没有安装程序包的权限李>
- 用户可能希望使用
显式地将分发版安装到其homedir中,而您的脚本本身却不知道这一点--user
的调用可能需要根据您是否在virtualenv中进行更改pip
- 安装可能试图引入依赖项,这会导致与用户安装的其他发行版发生冲突
- IDE很可能看不到动态导入的模块存在,并且可能会在其后续使用的无法解析的名称下面加上斜线
setup.py
,在setup
调用中使用install\u requires
参数来说明依赖项。请您的同学pip安装mypackage
,依赖项将在安装时而不是运行时收集。您可以直接将您的分发内容发送给他们(作为mypackage-0.1.tar.gz
文件或电子邮件)。或者您可以将其上载到索引,例如
这是一个初学者友好的资源,介绍如何创建和上传您自己的发行版。如何调用此功能?呃。。。。是解决此问题的更好方法初学者应该习惯安装软件包的想法。根据系统配置(主要是权限设置),您的脚本可能无法自行安装软件包,这是正常的。必须安装库才能以所有语言执行或编译代码是非常常见的。对于他们来说,安装它真的不应该被认为是一个问题。唯一的例外是最终用户。但是,作为参考,您可能希望使用importlib。