My cython
/ pyximport
code works very well on a read/write filesystem.
But (for testing purposes), I need to try it on a read only filesystem.
How to change the cython / pyximport temporary directory ? (where does it do the job? i.e. the on-the-fly compilation?)
How to set this "working directory" to somewhere else than the current directory, for example /tmp/
(which is not ro
, but rw
) ?
Traceback:
!! File "/usr/lib/python2.7/site-packages/Cython/Distutils/build_ext.py", line 301, in cython_sources
self.mkpath(os.path.dirname(target))
!! File "/usr/lib/python2.7/distutils/cmd.py", line 352, in mkpath
dir_util.mkpath(name, mode, dry_run=self.dry_run)
!! File "/usr/lib/python2.7/distutils/dir_util.py", line 76, in mkpath
"could not create '%s': %s" % (head, exc.args[-1]))
!! ImportError: Building module samplerbox_audio failed: ["DistutilsFileError: could not create '/root/.pyxbld': Read-only file system\n"]
The cythonize command takes a . py or . pyx file and compiles it into a C/C++ file. It then compiles the C/C++ file into an extension module which is directly importable from Python.
Cython is a compiled language that is typically used to generate CPython extension modules.
Cython is a static compiler for Python and Cython programming languages, it simplifies the job of writing Python C extensions. Cython allows us to compile Python code, the result is dynamic libraries that can be used as python modules too.
Note that regular Python takes more than 500 seconds for executing the above code while Cython just takes around 1 second. Thus, Cython is 500x times faster than Python for summing 1 billion numbers.
From help(pyximport.install)
By default, compiled modules will end up in a
.pyxbld
directory in the user's home directory. Passing a different path asbuild_dir
will override this.
so pass build_dir
as an argument when you call pyximport.install
to make it use your read/write system.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With