Проблема с установкой numpy

На продакшене используется legacy версия numpy 1.10.4. При попытке установить его на новой машине с чистой виртуальной средой virtualenv выходит ошибка

AttributeError: module 'numpy' has no attribute '__version__'

Происходит она в блоке стандартного патча от setuptools в функции

site-packages\setuptools\msvc.py
178 строка.

def msvc14_gen_lib_options(*args, **kwargs):
    """
    Patched "distutils._msvccompiler.gen_lib_options" for fix
    compatibility between "numpy.distutils" and "distutils._msvccompiler"
    (for Numpy < 1.11.2)
    """
    if "numpy.distutils" in sys.modules:
        import numpy as np
        if LegacyVersion(np.__version__) < LegacyVersion('1.11.2'):  # Ошибка идет именно здесь
            return np.distutils.ccompiler.gen_lib_options(*args, **kwargs)
    return get_unpatched(msvc14_gen_lib_options)(*args, **kwargs)

Есть идеи, как фиксить?

P.S Инфа по системе и пакетам

Windows 10

python3.6
setuptools 57.0.0
pip 21.1.3

P.S.S

К несчастью, использовать более свежую версию нет возможности из-за зависимостей.


Ответы (1 шт):

Автор решения: Pak Uula

Я вижу два пути.

Первый. Залезть ручками в setuptools и пофиксить найденную вами строчку. Написать что-нибудь такое:

    if not hasattr(np, '__version__') or LegacyVersion(np.__version__) < LegacyVersion('1.11.2'):

Второй. Скопировать numpy с продакшена. Вам нужны папки Lib\site-packages\numpy и Lib\site-packages\numpy-1.10.4.dist-info. Кроме того могут быть несколько файлов вне этих папок. Полный список файлов, принадлежащих пакету, перечислены в файле Lib\site-packages\numpy-1.10.4.dist-info\RECORD

Немного подумал и нашёл ещё третий путь. Даунгреднуть пайтон до 3.5 и установить скомпилированный whl командой pip install numpy-1.10.4-cp35-none-win_amd64.whl

Для 3.6 бинарника numpy нет. Всё, что есть, лежит здесь: https://pypi.org/project/numpy/1.10.4/#files

→ Ссылка