我想发送一个我为同学感到自豪的简短代码,并意识到他无法运行它,因为他没有理由安装该库。 安装当然非常简单 - 但我意识到这可能经常发生,主要是初学者 - 想为它构建一个简单的功能:
def smart_import(package_name):
try:
import package_name
except ImportError:
import pip
pip.main(['install', package_name])
问题是我真的不知道如何将包的名称作为可以通过import调用的值传递 想到将一个字符串转换回来,但这似乎比我想象的更复杂
答案 0 :(得分:9)
由于许多原因,这是一个坏主意,主要原因是人们通常不希望Python函数调用自动尝试在他们的机器上安装软件。
以下是此方法存在的其他一些问题:
dateutil
模块由python-dateutil
发行版提供。smart_import
,则会将名称导入错误的命名空间。setuptools
提供setuptools
,easy_install
和pkg_resources
。pip
本身。--user
明确地将分发版安装到其homedir中,并且您的脚本本身无法知道。pip
的调用可能需要根据您是否属于virtualenv而改变。该怎么做:
将您的代码打包到自己的发行版中。写一个setup.py
,在install_requires
调用中使用setup
参数提及依赖关系。请问您的同学pip install mypackage
,并且将在安装时而不是在运行时收集依赖项。您可以将发布直接发送给他们(作为mypackage-0.1.tar.gz
文件或wheel)。或者您可以将其上传到test pypi等索引。
Python Packaging User Guide是一个初学者友好的资源,描述了如何创建和上传自己的发行版。