Хобрук: Ваш путь к мастерству в программировании

Не удается импортировать файлы, созданные с помощью f2py, с помощью Eclipse в Windows

У меня есть несколько кодов Python, разработанных в Linux (с использованием Eclipse с Pydev), которые вызывают некоторые модули, сгенерированные с помощью f2py (расширения которых «*.so»), которые могут быть идеально выполнены в этой ОС. Теперь мне нужно запустить их и в Windows, но я нахожу некоторые трудности.

Когда в Windows я запускаю код Python, которому не нужны эти модули, все в порядке. Но если мне нужно их импортировать (например, «импортировать WHATEVER», будучи WHATEVER.so файлом, сгенерированным с использованием f2py), я получаю сообщение об ошибке «ImportError: нет модуля с именем WHATEVER». Эти модули находятся по тому же пути, что и основной файл Python (то есть в /projectname/src/). Я проверил PYTHONPATH и не вижу ничего плохого (этот путь уже есть).

Я также пытался импортировать их с помощью командного окна Python, обнаружив точно такую ​​​​же проблему. Кажется, он не может открыть эти файлы, даже если ищет в правильном каталоге. Кто-нибудь может понять, что я забыл?

Заранее спасибо.

12.12.2014

Ответы:


1

Файлы .so, сгенерированные f2py в Linux, специфичны для Linux и не будут работать в других операционных системах. Вот почему вы не можете запускать бинарные программы Linux в Windows или Windows .exes в Linux — формат совершенно другой. Чтобы использовать ваши библиотеки в Windows, вам необходимо скомпилировать их в Windows для создания .dll файлов. gcc/gfortran и другие доступны для Windows в нескольких различных дистрибутивах. Лично я предпочитаю Cygwin, так как его программа менеджера/установщика пакетов довольно проста.

12.12.2014
  • Конечно, поскольку вы говорите, что программа не будет использовать библиотеки фортрана под Windows, вы можете просто сделать их импорт условным, поместив все сами операторы импорта в предложение try: ... except ImportError: pass . 12.12.2014

  • 2

    Работа с dll, как прокомментировал MattDMo, была очень хорошим предложением. Однако это означало использование ctypes, что становится немного сложнее, когда подпрограмма Fortran возвращает значение более одной переменной (по крайней мере, для новичка, такого как я). Другой вариант, который отлично сработал для меня, заключался в том, чтобы заставить f2py генерировать файлы с расширением «.pyc» вместо предыдущего «.so». Для этого все очень хорошо объяснено здесь. Преимущество этого в том, что мне не нужно изменять коды, сделанные в среде Linux, и по-прежнему работать в Windows.

    16.12.2014
    Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..