Я попытался запустить примеры на странице:
http://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html#the-basics-of-cython
в Windows 10 с использованием Visual Studio 2017 и python 3.53 x64.
Компиляция прошла нормально. Но когда я пытаюсь импортировать сгенерированный pyd (dll) в Python 3.53 (x64), я получаю сообщение об ошибке.
Сгенерированный файл pyd и остальные файлы находятся в одной папке.
Удалось ли кому-нибудь успешно запустить эти 3 примера в приведенной выше ссылке под Python 3.5 с Visual Studio 2017?
import helloworld.cp35-win_amd64 ^ SyntaxError: недопустимый синтаксис
Пожалуйста, укажите это в своем вопросе, а не в качестве комментария.
Проблема только в том, что вы неправильно импортируете модули.
Так же, как вы используете import spam
, а не import spam.py
, для модуля Python, вы используете import spam
, а не import spam.cp35-win_amd64
для модуля расширения.
Обратите внимание, что пример, на который вы ссылаетесь, делает это так:
>>> import helloworld
Hello World
Если вам интересно, почему вы получили именно ту ошибку, которую сделали: символ -
не является частью имени, это арифметический оператор. Итак, вы сказали ему, что хотите импортировать модуль cp35 - win_amd64
из пакета spam
, и это сбило с толку синтаксический анализатор, поэтому он дал вам SyntaxError
.
Поскольку вы спросили о своем конкретном наборе инструментов: да, все они работают вместе. Фактически, как описано в документации в вики, все установщики Python 3.5 с python.org построены с помощью Visual C++ 14.0, который является компилятором, поставляемым с Visual Studio 2017, и поставляются с distutils
, который может автоматически обнаруживать и использовать его. (Если у вас старая версия setuptools
- введите pip show setuptools
, чтобы узнать, соответствует ли номер версии по крайней мере 34.4.0 - это может вызвать проблемы, но эти проблемы вообще не позволяют компилировать пакеты Cython.)
Спасибо. Ты прав. Сгенерированный файл pyd "helloworld.cp35-win_amd64.pyd" должен храниться без изменений в той же папке. Но при импорте должно быть указано только import helloworld
Скопируйте ошибку (всю трассировку) и вставьте в свой вопрос; не зная, какая у вас ошибка, ее трудно отладить.