我正在使用Python 3.6+,并希望检查脚本中是否安装了一些其他模块。如果没有,我想尝试安装一些警告:
1)如果我记得正确阅读的话,执行此操作的正确方法是研究“打包和版本控制” ..可能使用setuptools .. im不确定。有一个数字海洋页面很难遵循。它讨论了这个问题,但是我一直围绕这个主题遇到文档问题:它们都是基于将项目上载到pypip以便与pip一起使用的假设。我特别不想这样。我想手动将其直接分发给个人。也许将来在封闭的,不向所有人开放的github存储库中提供它。
当前,在我的脚本中,我正在使用try和except。尝试导入这些模块,如果它们不存在,我将运行此异常,但我不知道它是否有效。
except ImportError:
from pip._internal import main as pip
pip(['install', colorama])
import colorama
print('colorama imported successfully')
以及它的价值-我不知道pip(['install', colorama])
在做什么。
包装方面似乎在代码中包括了导入的模块。如何执行此功能?而不是检查是否安装了colorama,然后尝试启动子进程来安装它。.我仅假设这是“正确”的方法,如何将整个过程包括在内?
答案 0 :(得分:3)
通常要避免此问题的一件事是在虚拟环境中构建程序,您知道包含正确的python脚本-然后选择其中一个>
requirements.txt
文件,其中列出了在用户运行程序之前预期要安装的所有软件包(和版本)(您可以通过在计算机上执行pip install -r requirements.txt
来安装该列表上的所有内容) python script_name.py
)运行程序之前使用命令行理想情况下,如果所需的依赖项不存在,则会使脚本失败,并让用户手动安装它们以解决问题。
Here's python 3's documentation on virtual environments
您现在正在做的事情是非常规的-如果它正在工作,那么它正在工作,但这不是一个好习惯。造成这种情况的最大原因是,您的脚本在当前状态下未经用户同意在用户计算机上安装软件 ,即用户没有告诉程序要安装此软件,也没有被告知软件是必需的,但是该程序仍在安装它。对于您来说,这可能是无害的,但总的来说,这是可以避免的,因为它可以进入真正的阴暗区域。