Spyder не распознает модули cython при импорте в скрипт

У меня есть сценарий cython example1.pyx с различными функциями. Я пытаюсь использовать одну из этих функций в своем скрипте Python. Для этого я просто пытаюсь импортировать функцию из модуля cython следующим образом:

    from example1 import myfunction1

Я использую Spyder для запуска своего скрипта Python. Когда я запускаю его, я получаю следующую ошибку

    ModuleNotFoundError: No module named 'example1'

по какой-то причине скрипты расширения .pyx не распознаются как модули, которые можно импортировать. Я могу успешно импортировать другие скрипты python, но не везет со скриптами cython .pyx. Оказывается, я не компилировал скрипт python. Я сделал это с помощью следующего сценария:

from setuptools import setup, Extension
import numpy

from Cython.Distutils import build_ext as _build_ext


list_pyx = ['cydtw', 'cygak', 'cycc', 'soft_dtw_fast']
ext = [Extension(
        '%s' % s, ['%s.pyx' % s], include_dirs=[numpy.get_include()]
    ) for s in list_pyx]

setup(
    include_dirs=[numpy.get_include()],
    ext_modules=ext,
    cmdclass = {'build_ext': _build_ext},
)

когда я запустил это, я получил сообщение об ошибке, что мне нужен компилятор Visual C++ 14.0. Если посмотреть на документацию в https://wiki.python.org/moin/WindowsCompilers, Visual Studio 15, которую я установил, уже должна иметь Visual C++ 14.0, так что это сбивает с толку. Итак, я обновил свои инструменты настройки. Избавился от этой ошибки, но оказалось, что я не могу найти путь к файлу C; \ program files \ Microsoft SDKs \ Windows \ v8.1 \ lib. что я вижу, это не так. Вот где я сейчас застрял. Какие-нибудь подсказки?

У вас есть скомпилировал это, верно?

DavidW 15.04.2018 13:12

Я только что загрузил скрипт cython из репозитория. Нужно ли мне скомпилировать его, прежде чем я смогу использовать его в моем скрипте Python? Python не распознает его как модуль, если он не скомпилирован?

Sherry 15.04.2018 14:32

Да, смысл Cython в том, что он переводит код на C, что позволяет ему работать быстрее и напрямую обращаться к функциям C. Значит, его нужно скомпилировать. Скорее всего, в репозитории, из которого вы его загрузили, есть инструкции по установке, поэтому вам следует им следовать.

DavidW 15.04.2018 15:03

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

Sherry 15.04.2018 15:21
ссылка на сайт. поэтому я создал файл setup.py и построил его с помощью setup.py build_ext, но получил сообщение об ошибке, в котором говорилось, что не удается найти vcvarsall.bat. Похоже, это связано с тем, как python ссылается на неправильную версию Visual Studio. В качестве фона я использую Ananconda. Windows 7 и Visual Studio 15
Sherry 15.04.2018 15:27

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

DavidW 15.04.2018 15:36

Для исправления ужасная ошибка vcvarsall.bat есть эта ссылка: github.com/cython/cython/wiki/CythonExtensionsOnWindows

Adonis 16.04.2018 10:29

в ссылке упоминается, что необходимо проверить «общие инструменты для Visual C++» во время установки Visual Studio, чтобы избежать ошибки .bat. У меня уже установлена ​​Visual Studio 15, и я не помню, проверял ли я эту опцию. Тем не менее, мне удалось запустить другой сценарий установки, и у меня возникли следующие проблемы: ошибка: требуется Microsoft Visual C++ 14.0. Это уже идет в комплекте с Visual Studio 15, так что это было неожиданно. Затем я продолжил и обновил библиотеку setuptools. Обошел предыдущую ошибку, но получил ошибку о том, что она не распознает мой путь. Ему нужен C: \ Program Files \ Mircosoft SDKs \ Windows \ v8.1 \ lib '.

Sherry 20.04.2018 10:58

У меня v8.1, но без папки lib. Папка lib доступна для v8.1a и v10.0a, но указывает на v8.1. Не уверен, что здесь делать

Sherry 20.04.2018 10:59

установочный файл выглядит так: from setuptools import setup, Extension import numpy from Cython.Distutils import build_ext as _build_ext list_pyx = ['cydtw', 'cygak', 'cycc', 'soft_dtw_fast'] ext = [Extension( '%s' % s, ['%s.pyx' % s], include_dirs=[numpy.get_include()] ) for s in list_pyx] setup( include_dirs=[numpy.get_include()], ext_modules=ext, cmdclass = {'build_ext': _build_ext}, )

Sherry 20.04.2018 11:04

Пожалуйста, используйте функцию редактировать, чтобы обновить ваше сообщение соответствующей информацией. Также вы можете использовать @username в комментариях, чтобы люди, которым вы отвечаете, были уведомлены (я только что увидел ваш ответ). Пожалуйста, включите исходный код, который вы пытаетесь скомпилировать

Adonis 20.04.2018 11:18

@ Адонис. Спасибо. Только что обновил свой пост. На данный момент не могу поделиться кодом, но это всего лишь cython-версия расчета динамического искажения времени.

Sherry 20.04.2018 13:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
12
835
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалось решить вопрос. Компилятор Visual C++ не был установлен в Visual Studio 2015.

Чтобы проверить, откройте Visual Studio 15.

Посмотрите на шаблоны в Visual C++.

Я видел инструменты Visual C++ 2015 для рабочего стола Windows, которые нужно было установить.

Сюда входят инструменты и библиотеки для рабочего стола Windows, в том числе компилятор, универсальный CRT и Windows 8.1 SDK. Запускаем установку. Тем временем он попросит вас закрыть визуальную студию.

Смог компилировать скрипты Cython, а также вызывать функции в скрипте в моем проекте Python.

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

Подробная информация о средствах сборки Visual Studio доступна здесь: https://landinghub.visualstudio.com/visual-cpp-build-tools

Для установки пакетов, не являющихся чистыми, или компиляции файла cython или pyrex, подробности с точки зрения совместимости приведены здесь: https://wiki.python.org/moin/WindowsCompilers

так что вам все равно нужно явно использовать этот бит компиляции кода в скрипте, в который вы пытаетесь импортировать модуль cython, или достаточно иметь Visual Studio в вашей системе, а затем команда импорта, которая ранее возвращала ошибку, теперь будет Работа?

Matthew Watson 12.12.2020 23:15

Другие вопросы по теме