2017-09-11 56 views
1

我想了解setup.py中pandas'cython extensions的依賴關係結構。distutils擴展參數 - include vs依賴vs源?

distutils.extension.Extension有自變量sources,dependsinclude_dirs,我無法弄清楚它們之間的區別。特別是在熊貓的情況下,我可以刪除depends(或pxdfiles)中的條目,而不會破壞構建。

這三個參數有什麼區別?

更新以下來自@phd的回答: 我很欣賞這個想法,會盡力更好地溝通我的困惑之源。

在大熊貓setup.py文件上面鏈接,所述pandas._libs.tslib擴展被傳遞到distutils.extension.Extension與ARGS/kwargs:

ext = Extension('pandas._libs.tslib', 
    sources=['pandas/_libs/tslib.pyx', 
      'pandas/_libs/src/util.pxd', 
      'pandas/_libs/src/datetime/np_datetime.c', 
      'pandas/_libs/src/datetime/np_datetime_strings.c', 
      'pandas/_libs/src/period_helper.c'], 
    depends=['pandas/_libs/src/datetime/np_datetime.h', 
      'pandas/_libs/src/datetime/np_datetime_strings.h', 
      'pandas/_libs/src/period_helper.h', 
      'pandas/_libs/src/datetime.pxd'], 
    include_dirs=['pandas/_libs/src/klib', 'pandas/_libs/src']) 

採取例如util.pxdsources條目中。在include_dirs條目中是否存在pandas/_libs/src這不是多餘的? tslib直接從datetime.pxd進口,它具有表格cdef extern from "datetime/np_datetime.h"cdef extern from "datetime/np_datetime_strings.h"的「進口」。由於sources中的「* .c」文件或depends中的「* .h」文件或兩者都存在,所以這些是「允許」的,或者這兩個文件都存在或者...

我試過了一大堆排列去除這些依賴關係的子集,還沒有看到許多破壞構建的模式。

回答

0

查看detailed docsthe source code對於build_ext命令。

sources是編譯擴展的源文件列表(*.c)。

depends - 擴展需要編譯的附加文件列表。

include_dirs - 編譯器查找包含(頭文件)文件(*.h)的目錄列表。

pxdfilesCython-specific