pip: установка зависимостей не позволяет настроить сервер частных пакетов

#python #python-3.x #pip

#python #python-3.x #pip

Вопрос:

Мой случай: у меня есть изолированный сервер (без Интернета и python 3.8.2), на котором в качестве виртуальной среды python /apps/interface/usr/ хранятся все мои диски https://my.private.org/ , я использую pip 19.2.3 для установки пакетов.

Теперь у меня есть пакет с именем py , который имеет условие типа «setup_requires=[«setuptools-scm»]», (зависимость).

  1. py пакет загружен с https://my.private.org/
  2. теперь, при попытке загрузки setuptools-scm , он ссылается на https://files.pythonhosted.org/packages/... вместо https://my.private.org/ того, чтобы я попробовал приведенные ниже методы перенаправления pip для установки колес из https://my.private.org/ .

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

Способ 1:

 pip3.8 install py==1.8.1 --index-url https://user:psw@my.private.org/ --extra-index-url https://user:psw@my.private.org/ -v
  

Способ 2:
обновлено / apps / interface/usr/lib /python3.8/distutils/distutils.cfg

 [easy_install]
find_links = https://user:psw@my.private.org/
index-url = https://user:psw@my.private.org/
  

но бесполезно.

Метод 3: обновлены приведенные ниже файлы (проверено с каждым файлом)

 /etc/xdg/pip/pip.conf
/etc/pip.conf
/root/.pip/pip.conf
/root/.config/pip/pip.conf
/apps/interface/usr/pip.conf
  

Ниже приведена ошибка, которую я получаю

 raise DistutilsError("Download error for %s: %s"
    distutils.errors.DistutilsError: Download error for https://files.pythonhosted.org/packages/ad/d3/e54f8b4cde0f6fb4f231629f570c1a33ded18515411dee6df6fe363d976f/setuptools_scm-4.1.2-py2.py3-none-any.whl#sha256=69258e2eeba5f7ce1ed7a5f109519580fa3578250f8e4d6684859f86d1b15826: [Errno 101] Network is unreachable
  

В надежде найти, в чем проблема.

Примечание: Ниже приведены сведения об ошибке

 Downloading from URL https://my.private.org/py/py-1.8.1.tar.gz (from https://my.private.org/py/)
     |████████████████████████████████| 215kB 74kB/s 
  Added py==1.8.1 from https://my.private.org/py/py-1.8.1.tar.gz to build tracker '/tmp/pip-req-tracker-gohcv4uc'
    Running setup.py (path:/tmp/pip-install-xp37jgnc/py/setup.py) egg_info for package py
    Running command python setup.py egg_info
 Traceback (most recent call last):
      File "/usr/local/lib/python3.8/urllib/request.py", line 1319, in do_open
        h.request(req.get_method(), req.selector, req.data, headers,
      File "/usr/local/lib/python3.8/http/client.py", line 1230, in request
        self._send_request(method, url, body, headers, encode_chunked)
      File "/usr/local/lib/python3.8/http/client.py", line 1276, in _send_request
        self.endheaders(body, encode_chunked=encode_chunked)
      File "/usr/local/lib/python3.8/http/client.py", line 1225, in endheaders
        self._send_output(message_body, encode_chunked=encode_chunked)
      File "/usr/local/lib/python3.8/http/client.py", line 1004, in _send_output
        self.send(msg)
      File "/usr/local/lib/python3.8/http/client.py", line 944, in send
        self.connect()
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/ssl_support.py", line 173, in connect
        sock = socket.create_connection(
      File "/usr/local/lib/python3.8/socket.py", line 808, in create_connection
        raise err
      File "/usr/local/lib/python3.8/socket.py", line 796, in create_connection
        sock.connect(sa)
    OSError: [Errno 101] Network is unreachable

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 766, in open_url
        return open_with_auth(url, self.opener)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 961, in _socket_timeout
        return func(*args, **kwargs)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 1080, in open_with_auth
        fp = opener(request)
      File "/usr/local/lib/python3.8/urllib/request.py", line 525, in open
        response = self._open(req, data)
      File "/usr/local/lib/python3.8/urllib/request.py", line 542, in _open
        result = self._call_chain(self.handle_open, protocol, protocol  
      File "/usr/local/lib/python3.8/urllib/request.py", line 502, in _call_chain
        result = func(*args)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/ssl_support.py", line 160, in https_open
        return self.do_open(
      File "/usr/local/lib/python3.8/urllib/request.py", line 1322, in do_open
        raise URLError(err)
    urllib.error.URLError: <urlopen error [Errno 101] Network is unreachable>

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xp37jgnc/py/setup.py", line 42, in <module>
        main()
      File "/tmp/pip-install-xp37jgnc/py/setup.py", line 5, in main
        setup(
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/__init__.py", line 144, in setup
        _install_setup_requires(attrs)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/__init__.py", line 139, in _install_setup_requires
        dist.fetch_build_eggs(dist.setup_requires)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/dist.py", line 716, in fetch_build_eggs
        resolved_dists = pkg_resources.working_set.resolve(
      File "/apps/interface/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 780, in resolve
        dist = best[req.key] = env.best_match(
      File "/apps/interface/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1065, in best_match
        return self.obtain(req, installer)
      File "/apps/interface/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1077, in obtain
        return installer(requirement)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/dist.py", line 786, in fetch_build_egg
        return cmd.easy_install(req)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/command/easy_install.py", line 665, in easy_install
        dist = self.package_index.fetch_distribution(
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 655, in fetch_distribution
        dist = find(requirement)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 635, in find
        loc = self.download(dist.location, tmpdir)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 579, in download
        found = self._download_url(scheme.group(1), spec, tmpdir)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 824, in _download_url
        return self._attempt_download(url, filename)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 830, in _attempt_download
        headers = self._download_to(url, filename)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 729, in _download_to
        fp = self.open_url(url)
      File "/apps/interface/usr/lib/python3.8/site-packages/setuptools/package_index.py", line 779, in open_url
        raise DistutilsError("Download error for %s: %s"
    distutils.errors.DistutilsError: Download error for https://files.pythonhosted.org/packages/ad/d3/e54f8b4cde0f6fb4f231629f570c1a33ded18515411dee6df6fe363d976f/setuptools_scm-4.1.2-py2.py3-none-any.whl#sha256=69258e2eeba5f7ce1ed7a5f109519580fa3578250f8e4d6684859f86d1b15826: [Errno 101] Network is unreachable
Cleaning up...
  Removing source in /tmp/pip-install-xp37jgnc/py
Removed py==1.8.1 from https://packages.zeomega.org/py/py-1.8.1.tar.gz from build tracker '/tmp/pip-req-tracker-gohcv4uc'
Removed build tracker '/tmp/pip-req-tracker-gohcv4uc'
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  

Комментарии:

1. setup_requires проходит easy_install (хотя в более новых версиях setuptools он должен проходить через pip iirc?) — в любом случае, я бы посоветовал установить диски на ваш сервер pypi, чтобы вы не собирали каждый раз из исходного кода (полностью избегая этой проблемы)

2. Все мои диски находятся на сервере pypi (моем собственном pypi). Проблема в том, что он не ищет pkgs на моем сервере, вместо этого он пытается заглянуть в files.pythonhisted.org какой внешний сервер

3. ну, если он создается из исходного кода, вы либо исключили колеса из установки, либо вам не хватает колеса для py

4. это не из исходного кода..

5. я обещаю вам — это не сборка, которая происходит, если она устанавливается с колеса (если вы не уверены, обратите внимание, что она загружает .tar.gz не .whl , а затем, когда происходит сбой, говорится «Удаление источника»)

Ответ №1:

Наконец-то обнаружена проблема, easy_install не поддерживает настроенный index_url. Это главное из-за жестко закодированного URL в easy_install.py . Я изменил URL, как предложено в ссылке ниже, и он отлично работал. вы можете найти ответ здесь