python - 包括带有 python 模块的二进制文件,这样做是好的做法吗?

标签 python module package executable

我正在尝试编写我的第一个 python 模块,它可以轻松地分发和安装在不同的机器上(希望只需克隆存储库并运行 setup.py)。问题是我的模块依赖于一个小的二进制文件;我正在使用 Selenium 模块作为我的依赖项之一,它需要一个用于 chrome 的网络驱动程序(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 模块。

关于python - 包括带有 python 模块的二进制文件,这样做是好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38157061/

相关文章:

module - Rebol模块中的单词是如何绑定(bind)的?

iphone - ejabberd mod_offline iPhone推送通知

testing - 如何在我的项目中的所有测试文件上运行 go test, vendor 包除外

java - 是否可以将依赖项打包到.jar中

Python文件大小与数组不同

python - 统计一个txt文件中最常用的词

python - 没有名为 'win32api' 的模块

python - 将新版本上传到 TestPyPi

python - 无法获得所需的部分而将其余部分踢出

python - Django - 带有 mod_wsgi 的 Apache 不提供静态文件