pxd_include_dirs = [
directory for directory, dirs, files in os.walk('Cython/Includes')
if '__init__.pyx' in files or '__init__.pxd' in files
- or directory == 'Cython/Includes' ]
+ or directory == 'Cython/Includes' or directory == 'Cython/Includes/Deprecated']
pxd_include_patterns = [
p+'/*.pxd' for p in pxd_include_dirs ] + [
else:
scripts = ["cython.py"]
-def compile_cython_modules():
+def compile_cython_modules(profile=False):
source_root = os.path.abspath(os.path.dirname(__file__))
compiled_modules = ["Cython.Plex.Scanners",
"Cython.Compiler.Scanning",
del sys.modules[module]
sys.path.insert(0, os.path.join(source_root, self.build_lib))
+ if profile:
+ from Cython.Compiler.Options import directive_defaults
+ directive_defaults['profile'] = True
+ print("Enabled profiling for the Cython binary modules")
build_ext_orig.build_extensions(self)
setup_args['ext_modules'] = extensions
print("Compilation of '%s' failed" % ext.sources[0])
from Cython.Compiler.Main import compile
from Cython import Utils
+ if profile:
+ from Cython.Compiler.Options import directive_defaults
+ directive_defaults['profile'] = True
+ print("Enabled profiling for the Cython binary modules")
source_root = os.path.dirname(__file__)
for module in compiled_modules:
source_file = os.path.join(source_root, *module.split('.'))
result = compile(pyx_source_file)
c_source_file = result.c_file
if c_source_file:
+ # Py2 distutils can't handle unicode file paths
+ if isinstance(c_source_file, unicode):
+ filename_encoding = sys.getfilesystemencoding()
+ if filename_encoding is None:
+ filename_encoding = sys.getdefaultencoding()
+ c_source_file = c_source_file.encode(filename_encoding)
extensions.append(
Extension(module, sources = [c_source_file])
)
setup_args['ext_modules'] = extensions
add_command_class("build_ext", build_ext)
except Exception:
- print("ERROR: %s" % sys.exc_info()[1])
- print("Extension module compilation failed, using plain Python implementation")
+ print('''
+ERROR: %s
+
+Extension module compilation failed, looks like Cython cannot run
+properly on this system. To work around this, pass the option
+"--no-cython-compile". This will install a pure Python version of
+Cython without compiling its own sources.
+''' % sys.exc_info()[1])
+ raise
+
+cython_profile = '--cython-profile' in sys.argv
+if cython_profile:
+ sys.argv.remove('--cython-profile')
try:
sys.argv.remove("--no-cython-compile")
except ValueError:
- compile_cython_modules()
+ compile_cython_modules(cython_profile)
setup_args.update(setuptools_extra_args)