Porting Python2 C-API/Swig based modules to Python 3
Adam Pridgen
adam.pridgen at thecoverofnight.com
Wed Feb 23 19:19:40 EST 2011
Link to pastebin: http://pastebin.com/102fhkgp
On Wed, Feb 23, 2011 at 6:18 PM, Adam Pridgen
<adam.pridgen at thecoverofnight.com> wrote:
> Thanks for the help. That information got me started in the right
> direction. I put my notes up on paste bin for others to use in the
> future.
>
> For the future reference of others, I have included the pertinent
> details below. My process for identifying the various issues was
> compiling and running the project to see what was still broken after
> each fix. I know this is not the most efficient way, but it worked
> for this pylibcap since the code base was pretty small. I don't think
> everything is completely fixed, but its a step in the right direction.
>
> The initial hurdle I encountered was swig. I had to modify swig's
> code output, because it was not using the PyCapsule_* API yet. I
> found someones solution here: http://paste.pocoo.org/show/253494/.
> After applying that fix, I found that the pcap_interface.c and pcap.i
> files in the project were using some deprecated API calls. So I
> converted the following APIs:
>
> PyLong_AS_INT ==> PyLong_AsLong
> PyInt_* ==> PyLong_*
> PyString_* ==> PyBytes_* (initialily changed to PyUnicode_* but that
> was wrong, because I needed the Raw Bytes)
>
> I also had to change s# to y#. Before, s# stood for string and #, but
> it now means unicode and number.
>
>
>
> Hopefully these details will be helpful to others in the future.
> Thanks again for the nudge,
>
> -- Adam.
>
> On Wed, Feb 23, 2011 at 11:58 AM, casevh <casevh at gmail.com> wrote:
>> On Feb 23, 8:54 am, Adam Pridgen <adam.prid... at thecoverofnight.com>
>> wrote:
>>> Hello,
>>>
>>> I am trying to get a compiled module to work with Python3. The code I
>>> am compiling was originally intended to be used in a Python 2.*
>>> environment, but I updated all the Python 2.* elements and the swig
>>> commands used by the setup.py script. I got the library to
>>> successfully compile, but I am getting the following errors on import
>>> (below). I am not sure how to trouble shoot this problem, and the
>>> fact that only one symbol (_PyCObject_FromVoidPtr) is missing is
>>> disconcerting. I Googled some, but the symbol mentioned only showed
>>> up in a few posts, where linking was an issue. I have also gone
>>> through the setup.py script and explicitly defined all the library
>>> paths.
>>>
>>> My questions:
>>>
>>> - Has anyone ever ported Python 2* modules/libs to Python 3 that rely
>>> on swig, and are there some changes in the C-API/swig I need to be
>>> looking for to make this port successful?
>>>
>>> - Does anyone have any advice/insght about how I can troubleshoot,
>>> diagnose, and resolve this issue?
>>>
>>> Thanks in advance,
>>>
>>> -- Adam
>>>
>>> <error message>
>>>
>>> 0:pylibpcap-0.6.2$ python3
>>> Python 3.2 (r32:88452, Feb 20 2011, 11:12:31)
>>> [GCC 4.2.1 (Apple Inc. build 5664)] on darwin
>>> Type "help", "copyright", "credits" or "license" for more information.>>> import pcap,py
>>>
>>> Traceback (most recent call last):
>>> File "<stdin>", line 1, in <module>
>>> File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/pcap.py",
>>> line 25, in <module>
>>> _pcap = swig_import_helper()
>>> File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/pcap.py",
>>> line 21, in swig_import_helper
>>> _mod = imp.load_module('_pcap', fp, pathname, description)
>>> ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/_pcapmodule.so,
>>> 2): Symbol not found: _PyCObject_FromVoidPtr
>>> Referenced from:
>>> /Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/_pcapmodule.so
>>> Expected in: flat namespace
>>> in /Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/_pcapmodule.so
>>>
>>>
>>>
>>> >>> ^D- Hide quoted text -
>>>
>>> - Show quoted text -
>>
>> This is a change in the C-API in 3.2. See http://bugs.python.org/issue5630
>>
>> casevh
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
>
More information about the Python-list
mailing list