Что мне нужно предоставить py2exe для использования scipy.optimize.bisect? - PullRequest
0 голосов
/ 07 февраля 2019

Я ввел scipy в свой проект, когда использовал другую библиотеку, которая зависит от него.Мне пришлось сделать что-то интересное, что я нашел в интернете в моем файле setup.py, чтобы py2exe работал правильно.

Теперь я хочу использовать scipy.optimize.bisect в моем проекте.

КогдаЯ попытался запустить исполняемый файл, я получил ошибку отсутствующего модуля, для чего я добавил еще одно включение.Затем я получил загадку:

Файл "scipy \ optimize_slsqp.pyc", строка 10, в __load
ImportError: Ошибка загрузки DLL: указанный модуль не найден.

Я не знаю, чего не хватает.

Я использую Python 2.7, py2exe 0.6.9, scipy 1.2.0.

Вот пример MCV:

main.py

from scipy.optimize import bisect


def f(t):
    return t**2 - 1


print bisect(f, 0, 2)

setup.py

import os
import sys
from distutils.core import setup

import numpy
import py2exe
import scipy


def dll_paths_fix(m):
    '''Add directory containing a dll file to sys.path'''
    paths = set()
    m_path = m.__path__[0]
    for dirpath, _, filenames in os.walk(m_path):
        for item in filenames:
            if item.endswith('.dll'):
                paths.add(dirpath)

    for path in paths:
        sys.path.append(path)


dll_paths_fix(numpy)
dll_paths_fix(scipy)

existing_includes = ["scipy.sparse.csgraph._validation", "scipy.integrate", "scipy", "scipy.special.*", "scipy.linalg.*"]
new_includes = ["scipy._lib.*"]

setup(
    console=['main.py'],
    options={
        'py2exe': {
            'includes': existing_includes + new_includes}})

...