TL; DR: setup.py
里的 data_files
之前写了个包,核心部分是用 Go 写的一个独立可执行文件。因为不想碰 C extention 那套机制,所以采用了独立可执行文件与 Python 主进程 Unix Domain Socket 通信的方式。这样,通过 PyPI 分发包的时候就需要安装时将那个二进制文件放在用户 bin 目录下。
上网查出来的方案都是在 setup .py
里用 package_data
保留文件,然后用 cmdclass
里安装时的 hook 来执行安装后移动文件的命令。于是我按照这个方式硬写了个,还得手动检测路径(sys.prefix
和 --user
什么的)。本地从源码安装测试是行得通,但用 wheel 文件安装时,那个 hook 就不执行了。又不优雅又不方便🤷♂️
我就去看看 setup .py
的文档,还真就找到了 data_files
这个用来在安装后放置文件的选项。可以通过这个将文件放在用户指定的安装 prefix 下,所以我的问题加一行设置就解决了 data_files=[('bin', ['path/to/my/binary',]),],
(会在安装后将 binary
放在 {prefix}/bin/
上)。
不过话说回来,这个预编译的 Go 可执行文件并不跨平台(我这个包本来是只针想对 Linux 平台开发的),而这样一番操作下来得到的是通用的 wheel 文件,总感觉不怎么严谨。之前写 cython 拓展的时候做过 manylinux 的 wheel,不知道这种不涉及 C extention 的怎么搞?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.