I do not agree with the accepted answer, it seems that yes, the contents of the source code are available even in .pyd .
Let's see, for example, what happens if an error arrives:
1) Create this file:
whathappenswhenerror.pyx
A = 6 print 'hello' print A print 1/0
2) Compile it with python setup.py build :
setup.py
from distutils.core import setup from Cython.Build import cythonize setup(ext_modules = cythonize("whathappenswhenerror.pyx"), include_dirs=[])
3) Now import the .pyd file into the standard python file:
testwhathappenswhenerror.py
import whathappenswhenerror
4) Let run it with python testwhathappenswhenerror.py . Here is the result:
hello 6 Traceback (most recent call last): File "D:\testwhathappenswhenerror.py", line 1, in <module> import whathappenswhenerror File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824) print 1/0
As you can see, the line of code print 1/0 # this will generate an error , which was in the .pyx source code, is displayed! Even a comment is displayed!
4 bis) If I delete (or move elsewhere) the source .pyx file before step 3), then the source code print 1/0 # this will generate an error no longer displayed:
hello 6 Traceback (most recent call last): File "D:\testwhathappenswhenerror.py", line 1, in <module> import whathappenswhenerror File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824) ZeroDivisionError: integer division or modulo by zero
But does this mean that it is not included in .pyd? I'm not sure.