Where does cython pyximport compile?
Asked Answered
S

2

9

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"]
Surfboat answered 6/5, 2015 at 14:36 Comment(0)
G
16

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.

Godwin answered 6/5, 2015 at 19:41 Comment(0)
A
1

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/")
Alesandrini answered 27/12, 2020 at 3:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.