Basj
Basj

Reputation: 46393

Where does cython pyximport compile?

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"]

Upvotes: 9

Views: 2390

Answers (2)

Mostafa Farrag
Mostafa Farrag

Reputation: 84

From Cython documentation Link

pass the build_dir argument with a value equals to the path where you want the modules to be compiled and that will override the home directory

 docs

for example

pyximport.install(build_dir="/mnt/f/")

Upvotes: 1

DavidW
DavidW

Reputation: 30941

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 as build_dir will override this.

so pass build_dir as an argument when you call pyximport.install to make it use your read/write system.

Upvotes: 16

Related Questions