#script #python #write #short #ecosystem #power #pypi

app espadrille

利用整个Python生态系统的力量编写简短、简单的脚本

1 个不稳定版本

使用旧的Rust 2015

0.1.0 2019年12月19日

#5 in #pypi

MPL-2.0 许可证

14KB
116

埃斯帕德里尔

利用整个Python生态系统的力量编写简短、简单的脚本。目前支持macOS。

Shell脚本编写很麻烦,除非你已经花了几年的时间精通其神秘的语法和Shell的一切都是字符串的哲学的众多解决方案。编写一个Python脚本并将其放入你的$PATH中似乎是一个更吸引人的选择,但有时你需要的不仅仅是Python的标准库。在全局Python中安装你想要的库感觉有点恶心,但正确地安装它们并创建virtualenv以及打包元数据文件似乎不值得费那个劲。

埃斯帕德里尔允许你编写一个依赖外部库的单文件脚本,并且会为你安装它们并确保它们与系统的其余部分隔离。

埃斯帕德里尔这个名字来自一种鞋,它也是一种Python的非传统打包方法

⚠️ 埃斯帕德里尔目前是一个非常粗糙的概念验证。它可能会吃掉你的作业。

安装

安装预构建的二进制文件(目前仅限macOS Mojave)

pip install espadrille

从源码安装,假设你已经安装了Rust工具链

cargo install espadrille

将来,pip将能够为更多平台安装二进制文件,也许还可以从源码构建。

用法

编写一个Python脚本,其shebang行为#!/usr/bin/env espadrille <dependencies> --,如下所示

#!/usr/bin/env espadrille requests --

import requests

requests.get('https://example.com')

然后,使用chmod +x更改该脚本的权限,并运行它。

常见问题解答

  • 我的脚本将在哪个Python解释器/版本下运行?python3命令调用的任意一个。如果这发生了变化,你将得到第一次Espadrille遇到你使用的特定依赖组合时(即在它创建virtualenv时)调用的python3命令所调用的任意一个。Espadrille的未来版本将在这方面更加智能,甚至可能允许你指定要使用的Python版本。
  • 我将获得哪些依赖的版本? Espadrille首次遇到你正在使用的特定依赖组合的最新版本(即创建virtualenv时)。如果你需要指定版本,你可以在shebang中指定版本号(例如,requests>=2requests==2.19.1,或Pip接受的任何其他格式)。Espadrille的未来版本将在此方面变得更加智能,通过定期升级来实现。
  • 如何将依赖列表换行? 不要换行。当你需要这样做的时候,编写一个setup.py文件,或者使用flit或poetry,因为你现在有一个正式的项目,而不仅仅是一个简短的简单脚本。
  • 为什么Espadrille即使我只更改了一个依赖项也会重新安装所有依赖项? Espadrille通过散列依赖项列表来确定使用哪个virtualenv。当该列表发生变化时,你会得到一个全新的virtualenv。幸运的是,由于Pip更喜欢wheel并且保留安装内容的本地缓存,因此这通常非常快,除非你依赖于一个没有为你平台提供wheel的大型C依赖项。
  • 为什么我的磁盘上会充满virtualenv? 如上所述。Espadrille的未来版本将在此方面变得更加智能,关于清理一段时间内未使用的virtualenv。现在,只需删除Espadrille的缓存文件夹;下次它需要时,它会重新创建它实际使用的所有virtualenv。
  • 等等,这是一个Python工具,为什么它是用Rust编写的? 因为Espadrille使用virtualenv,如果Espadrille本身是用Python编写的,你就必须等待Python解释器启动两次。实际上,在大多数情况下,这可能不是一个大问题,所以这让我们想到了真正的理由:这听起来是个有趣的想法。
  • 如果Espadrille能够从import语句中找出要安装的包,会怎样? 非常好。不幸的是,在Python中,发行版(你通过Pip从PyPI安装的东西)的名称不一定要与(你导入的东西)的名称匹配。这意味着PyPI上的两个不同的发行版可能暴露了相同的包,无论是有意还是无意。由于Espadrille的整个工作本质上是“从互联网下载代码并运行”,因此确保你得到你期望的代码是非常重要的。
  • 从互联网下载代码并运行它不是超级不安全吗? 如果你打算从PyPI下载每个单独的包,并在安装之前手动审计其内容,那么Espadrille不适合你。但说到底,你本来就不会这样做。你只是会盲目地pip install它,这正是Espadrille所做的。尽管如此,Espadrille当然可以做一些事情来保护你的安全,未来版本可能会做一些。
  • 为什么它不能在Linux上运行? 在Linux上,shebang只能有一个参数,Espadrille脚本的shebang通常是/usr/bin/env espadrille foo bar --,这意味着env将尝试查找文件名为espadrille foo bar --的二进制文件。Espadrille的未来版本将从此文件的另一部分读取依赖项,以防止这种情况。

依赖项

~4.5MB
~58K SLoC