将现代Python包拖放到单个程序中

2020-09-18 01:31:32

由于超出这篇博客文章范围的原因,我正在考虑增强我们的Python程序以记录电子邮件附件信息,以便Exim使用工具查看MS Office文件内部是否有不好的迹象。据我所知,Oletools不是由Ubuntu打包的,而且无论如何它都会是一个较旧的版本,所以我们需要自己添加Oletools Python包。

官方的olTools安装说明谈到了使用pitherpip或setup.py。一般来说,我们强烈反对在系统范围内安装任何东西,除非通过Ubuntu自己的软件包管理系统,而且我们的Python程序运行的环境实际上没有使用pip--user选项的主目录,所以明显而简单的pip调用是不存在的。在过去(Django),我曾使用setup.pymethod方法将一个大型Python包安装到特定的目录层次结构中,这是一件非常痛苦的事情,所以我不想再这样做了。

(我们也不想了解如何构建和维护Python虚拟环境,然后将我们如何运行此Python程序转换为使用一个。)。

在查看了pip#39;的帮助输出之后,我找到了pip install--target<;directory选项,并对其进行了一些测试。这似乎或多或少做了我想要做的事情,因为它将ololol及其所有依赖项安装到目标目录中。目标目录中还散布着各种元数据,所以我们可能不想把它放在程序的正常源代码所在的位置。这意味着我们需要安排运行该程序,以便将$PYTHONPATH设置为目标目录,但这是一个可以解决的问题。

(此pip install调用确实会将一些额外的管道元数据写入$HOME。幸运的是,它确实尊重$HOME环境变量的值,因此我可以指向该垃圾目录,然后将其删除。或者,我可以使$HOME指向我的目标目录,这样一切都在一个位置。)。

所有这一切都不像在程序的目录中放置一个olTools目录树那样整齐和简单,就像我可以处理需要rarfile模块的方式一样,但是olTools又有一堆依赖项,pip会为我处理所有这些依赖项。我可以手动将它们全部复制到适当的位置,但这实际上会创建一个足够杂乱的程序目录,即使它需要$PYTHONPATH步骤,我也会选择一个单独的目录。

(有些人会说,设置$PYTHONPATH意味着我应该一直走到一个虚拟环境,但那会让我学得更多,而且会更不透明。但是看了这段视频后,我了解到Python3现在有了对虚拟环境的标准支持。)