python setup.py安装,在virtualenv内存不足

时间:2016-06-29 15:57:03

标签: python install cython distutils

我正在编写包含一些Cython代码的Python包。我用virtualenv。我编写

时编译得很好
$ source activate
$ python setup.py build_ext --inplace

但是,当我尝试安装软件包时,它开始占用内存,直到我的计算机挂起(或者我之前杀死了进程)。更具体地说,它在我尝试时挂起:

$ python setup.py install
running install
running bdist_egg
running egg_info
creating ColoredHRG.egg-info
writing ColoredHRG.egg-info/PKG-INFO
writing top-level names to ColoredHRG.egg-info/top_level.txt
writing dependency_links to ColoredHRG.egg-info/dependency_links.txt
writing manifest file 'ColoredHRG.egg-info/SOURCES.txt

我认为以下[https://github.com/docker/docker/issues/10025][1]可能是问题的根源。基本上,在上面引用的问题中,它说明如下

  

我可以复制这个问题。上述决议并未暗示   改变Python版本修复任何东西。它是由文件编写的   虽然我不知道为什么,但是造成它的设置工具。有时它   在编写dependency_links.txt时有时会挂起   SOURCES.txt。将看看我是否可以进一步调查。

     

...

     哈哈,好的,好的   问题是你从/和distutils调用setup.py做了   listdir('。')来自调用目录,因此我假设它已经走了   整个文件系统。所以我想,不要这样做。   https://github.com/python/cpython/blob/master/Lib/distutils/filelist.py#L245

我知道发生了什么,但我不知道如何解决问题。

可能有用的更多信息。低于setup.py

的内容
from setuptools import setup
from Cython.Build import cythonize

setup( name = 'ColoredHRG' ,
       version = '0.1' ,
       description = 'my package.' ,
       url = 'BLA BLA' ,
       author = 'BLA BLA' ,
       author_email = 'BLA BLA' ,
       license = 'GPL3' ,
       packages = [ 'ColoredHRG' ] ,
       ext_modules = cythonize( [ "ColoredHRG/ColoredHRG.pyx" ,
                                  "ColoredHRG/Pool.pyx" , 
                                  "ColoredHRG/MC.pyx" , 
                                  "ColoredHRG/EXAMPLE_traveling_salesman.pyx" , 
                                  "ColoredHRG/MC_ColoredHRG.pyx" ] ,
                                  language = 'c++' ) ,
                                  zip_safe = False )

编辑:修正了错误的句子。

编辑:添加了标记cython

1 个答案:

答案 0 :(得分:1)

我终于找到了问题。包的文件夹结构如下

ColoredHRG/setup.py
...
ColoredHRG/ColoredHRG/ColoredHRG.pyx
ColoredHRG/ColoredHRG/MC.pyx
...
ColoredHRG/ColoredHRG/examples/examples.py
...

另外,在文件夹examples内,有一个软链接(我在Linux中)到位于该位置的文件夹

../../DATA

即,软链接是

ColoredHRG/ColoredHRG/examples/DATA -> ../../DATA

事实证明,这会导致distutils进入无限递归循环,吃掉我计算机的整个内存然后挂起。

我删除了软链接,现在一切正常。

编辑:纠正错字。