2010-10-12 2 views
1

Я пытаюсь использовать приложение, которое имеет зависимость ctypes, но я получаю эту ошибку:Путь библиотеки Python для порта OSX? Cant найти 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 

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

#!/usr/bin/python 

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

$ which python 
/opt/local/bin/python 

Есть ли какая-нибудь работа для этого?

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

ответ

2

Простым решением будет использование встроенной сборки 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

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.

Смежные вопросы