Путь OSX к Python в библиотеке? Не могу найти Ctypes - PullRequest
1 голос
/ 12 октября 2010

Я пытаюсь использовать приложение с зависимостью ctypes, но получаю эту ошибку:

$ python peach.py -t ~/Desktop/fuzz/wav/template.xml 

] Peach 2.3.6 Runtime
] Copyright (c) Michael Eddington

Traceback (most recent call last):
  File "peach.py", line 335, in <module>
    from Peach.Engine import *
  File "/opt/Peach-2.3.6/Peach/__init__.py", line 40, in <module>
    import Publishers, Transformers
  File "/opt/Peach-2.3.6/Peach/Publishers/__init__.py", line 37, in <module>
    import file, sql, stdout, tcp, udp, com, process, http, icmp, raw, remote, dll, smtp
  File "/opt/Peach-2.3.6/Peach/Publishers/file.py", line 37, in <module>
    from Peach.Engine.engine import Engine
  File "/opt/Peach-2.3.6/Peach/Engine/engine.py", line 835, in <module>
    from Peach.Engine.state import StateEngine
  File "/opt/Peach-2.3.6/Peach/Engine/state.py", line 38, in <module>
    import sys, re, types, time, struct, ctypes
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/__init__.py", line 10, in <module>
    from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes

Я установил py-ctypes из портов, но, похоже, это только версия Python 2.4:

$ port contents py-ctypes
Port py-ctypes contains:
  /opt/local/lib/python2.4/site-packages/_ctypes.so
  /opt/local/lib/python2.4/site-packages/_ctypes_test.so
  /opt/local/lib/python2.4/site-packages/ctypes/__init__.py
  /opt/local/lib/python2.4/site-packages/ctypes/__init__.pyc
  /opt/local/lib/python2.4/site-packages/ctypes/_endian.py
  /opt/local/lib/python2.4/site-packages/ctypes/_endian.pyc
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/__init__.py
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/__init__.pyc
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/dyld.py
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/dyld.pyc
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/dylib.py
  /opt/local/lib/python2.4/site-packages/ctypes/macholib/dylib.pyc

Затем я попытался запустить приложение через python2.4, но, похоже, приложение использует синтаксис, который доступен только в версии 2.5:

$ python2.4 peach.py -t ~/Desktop/fuzz/wav/template.xml 
  File "peach.py", line 498
    finally:
          ^
SyntaxError: invalid syntax

Моя установка python также осуществляется с портов OSX, и я заметил, что в приложении Peach он определяет python как:

#!/usr/bin/python

Будет ли это что-нибудь связывать, если мой исполняемый файл python по умолчанию указывает на мою установку порта (и я запускаю 'python peach.py')?

$ which python
/opt/local/bin/python

Есть ли способ обойти это?

  • ctypes для python2.5?
  • Возможность добавить 2,4 библиотеки к пути 2,5?

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Простым решением будет использование встроенной сборки Python, которая входит в состав Mac OS. Это определенно работает с последней версией Mac OS X 10.6.4, которая имеет Python 2.6.

Вот пример, показывающий, что _ctypes успешно импортируется:

mariah:~ joet3ch$ /usr/bin/python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from _ctypes import Union, Structure, Array
>>>

Если после этого у вас возникнут проблемы, попробуйте просмотреть атрибут sys.path, чтобы узнать, какие модули и версии находятся на вашем пути.

Вот пример просмотра содержимого sys.path в новой сборке Mac OS 10.6.4:

mariah:~ joet3ch$ /usr/bin/python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Python/2.6/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC', '/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode']
>>> 
1 голос
/ 12 октября 2010

ctypes - стандартная библиотека Python начиная с версии 2.5, поэтому py-ctypes не требуется.Строка, в которой вы получаете ImportError, все еще существует в моей установке 2.6.5.

У меня нет OSX, поэтому мой вопрос: относится ли /opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5 к стандартной установке Python 2.5 или можетпринадлежат, возможно, неработающей установке какого-либо фреймворка?

В работающей оболочке python вы можете проверить значение sys.path.Возможно, существует некоторая неработающая библиотека, которая предшествует стандартной библиотеке.

Строка shebang #!/usr/bin/python интерпретируется ОС, если это первая строка исполняемого скрипта, которая вызывается непосредственно как обычная программа.Во всех остальных случаях это просто комментарий.В частности, строка игнорируется, если вы вызываете скрипт, как в python myscript.py, или если он импортирован другим кодом Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...