Как я могу упаковывать и распространять проекты Python с зависимостями, которые требуют установки драйверов? - PullRequest
0 голосов
/ 17 октября 2018

Я создаю пакет Python, который требует Selenium в качестве зависимости.Чтобы заставить Selenium работать локально, мне нужно установить драйвер Chrome / Firefox перед его использованием.Мне интересно, есть ли способ установить этот драйвер с моим пакетом при установке с помощью pip, чтобы мой пакет можно было использовать сразу после установки, не выполняя дополнительные шаги по установке драйвера?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я считаю, что не стоит добавлять драйверы как часть вашего пакета, потому что конечные пользователи могут обновить браузер, и для этого требуется новая версия драйвера, в этот момент вам необходимо развернуть обновление для вашего пакета..

Сказав это, я не знаю, что делает ваш пакет, но если вы хотите добавить некоторые двоичные данные в ваш пакет и использовать их без внешнего пакета, вы можете попробовать следующий подход.

PostInstallCommand будет запущен после установки.

setup.py

import pkg_resources
from setuptools import setup
from setuptools.command.install import install


class PostInstallCommand(install):
    def run(self):
        driver = pkg_resources.resource_filename(__name__, 'geckodriver.exe')
        # do whatever you want to do with your driver
        install.run(self)


setup(
   name='mypackage',
   version='1.0',
   packages=['mypackage'],
   package_data = {'mypackage': ['drivers/*']},
   description='Test',
   author='Batman',
   author_email='batman@superheroes.com',
   install_requires=['selenium>=3.14.1'],
   cmdclass={'install': PostInstallCommand}
)
0 голосов
/ 17 октября 2018

Мы можем использовать библиотеку https://pypi.org/project/webdriver-manager/ и устанавливать зависимости драйвера программно во время выполнения.

pip install webdriver-manager

Например, ниже строки python автоматически установит chromedriver и установит путь окружения.

from webdriver_manager.chrome import ChromeDriverManager

webdriver.Chrome(ChromeDriverManager().install())

Аналогичным образом вы можете настроить и другой драйвер.

Работа в автономном режиме

Если вы хотите, чтобы ваш пакет Python работал без зависимости от времени выполненияи вам нужно упаковать драйвер вместе с вашим пакетом.Затем вы можете использовать приведенный ниже код для загрузки и получить путь загрузки.Затем вы можете переместить драйвер на свой ресурс и упаковать его программным способом.

executable_path=ChromeDriverManager().install()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...