包含一个python模块的二进制文件,这是一个很好的做法



我正在尝试编写我的第一个python模块,可以很容易地分发和安装在不同的机器上(希望只是克隆存储库和运行setup.py)。问题是我的模块依赖于一个小的二进制文件;我使用的硒模块作为我的依赖关系之一,它需要一个浏览器驱动程序(http://chromedriver.storage.googleapis.com/index.html?path=2.22/)。

我想做的是在我的repo中包含不同的二进制文件,让python确定系统平台,选择正确的二进制文件,将其添加到系统路径,然后正常安装模块。

这容易做吗?更重要的是,这真的是好的做法吗?还是有更好的选择?必须分别下载二进制文件并将其添加到我想要运行模块的每台机器的系统路径中,这似乎是一件非常烦人的事情,但我宁愿不违反惯例。

根据ivan_pozdeev和dmitryro的评论,这是我目前提出的解决方案:

在我的项目目录中有一个文件夹bin/,子文件夹为linux32/, linux64/, mac32/, win32/。在每个子文件夹中都有相应的可执行文件(chromedriver/cromedriver.exe)。

我在setup.py脚本中添加了以下行:
import platform
# Determine the correct platform for the webdriver
system = platform.system()
arch, _ = platform.architecture()
if system == 'Linux':
    if arch == '64bit':
        webdriver = 'bin/linux64/chromedriver'
    else:
        webdriver = 'bin/linux32/chromedriver'
if system == 'Windows':
    webdriver = 'bin/win32/chromedriver.exe'
if system == 'Darwin':
    webdriver = 'bin/mac32/chromedriver'
然后,通过调用setup()函数,我只需添加关键字参数
scripts=[webdriver],

经过一些简短的测试后,这似乎将正确的可执行文件复制到系统路径并正常安装python模块。

最新更新