包含带有python模块的二进制文件,最好这样做吗?

时间:2016-07-02 06:04:40

标签: python module packages executable

我正在尝试编写我的第一个可以轻松分发并安装在不同机器上的python模块(希望通过克隆存储库并运行setup.py)。问题是我的模块依赖于一个小的二进制文件;我使用Selenium模块作为我的依赖项之一,它需要一个用于chrome的webdriver(http://chromedriver.storage.googleapis.com/index.html?path=2.22/)。

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

这很容易吗?更重要的是,这实际上是一种好的做法还是有更好的选择?单独下载二进制文件并将其添加到我想运行模块的每台机器的系统路径上似乎是一件非常讨厌的事情,但我宁愿不违反惯例。

1 个答案:

答案 0 :(得分:1)

基于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模块。