我正在使用 Cython 作為由 CMake 驅(qū)動的大型項目的構(gòu)建設(shè)置的一部分。我似乎無法讓 Cython.c在合理的位置生成文件。我的文件布局:C:\mypath\src\demo.py # Cython source fileC:\mypath\build\bin # I want demo.pyd to end up hereC:\mypath\build\projects\cyt\setup.py # Generated by CMakeMysetup.py是由 CMake 生成的(很多取決于configure_file),位于上面指定的位置。這個位置符合總體項目的通常結(jié)構(gòu)(它構(gòu)建了一百多個庫和可執(zhí)行文件)并且不是我想要(或可以輕松)更改的。生成的setup.py看起來像這樣:from distutils.core import setup, Extensionfrom Cython.Build import cythonizeimport os.pathextension_args = { 'extra_compile_args' : ['/DWIN32','/DWIN64'], 'extra_link_args' : ['/MACHINE:X64'],}source = '../../../src/demo.py'modules = [Extension( os.path.splitext(os.path.basename(source))[0], sources = [source], **extension_args )]modules = cythonize( modules, build_dir = 'BUILD_DIR', compiler_directives = {'language_level' : 2})(請注意,與實際情況相比,這大大簡化了,它在 中傳遞了許多附加參數(shù)extension_args,并包含許多source文件,每個文件在 中都有自己的對象modules。不過,我已經(jīng)驗證了上面的最小化版本重現(xiàn)了我的問題)。Cython 是這樣運行的:cd C:\mypath\build\projects\cytpython setup.py build_ext --build-lib C:/mypath/build/bin --build-temp C:/mypath/build/projects/cyt理想情況下,我希望來自 Cython 的所有中間構(gòu)建工件(生成的 C 文件、目標(biāo)文件、exp 文件等)都駐留在C:\mypath\build\projects\cyt. 但是,我似乎無法做到這一點。這是構(gòu)建人工制品實際結(jié)束的地方:demo.pyd最終C:\mypath\build\bin在我想要的地方。這里沒問題。目標(biāo)文件demo.obj,連同鏈接的文件demo.exp和demo.lib,以C:\mypath\build\projects\src. 我想要他們在里面cyt。C 文件demo.c以C:\mypath\build\src. 再次,我想要這個在projects\cyt.在 中setup.py,我正在按照本答案中的建議設(shè)置build_dir參數(shù),但它似乎沒有按照我的意愿工作。我使用還試圖按照另一種答案對這個問題,但沒有任何效果(從我的用Cython源代碼的檢查情況來看,并不適用于所有的呼叫)。cythonizecython_c_in_tempcythonize我嘗試為 使用絕對路徑source,但這讓事情變得更糟,因為 C 文件最終生成在源樹 (as )內(nèi)的demo.py,旁邊。C:\src\demo.c我的問題:如何確保所有生成的中間文件(C、obj 和朋友)最終與生成的setup.py.我可以為我的情況想到兩種解決方法,但它們都感覺像是我想避免的黑客:從他們的位置Python源文件復(fù)制所有C:\mypath\src到一起產(chǎn)生的setup.py,這樣我可以參考他們沒有..路徑。這可能會解決問題,但會增加(已經(jīng)很長的)構(gòu)建過程的負(fù)擔(dān),我寧愿避免進(jìn)行數(shù)十個額外的文件復(fù)制操作。由于在文件結(jié)束的路徑似乎通過連接“的目錄組成setup.py+價值build_dir+價值source”,我可以指望的數(shù)量..的source路徑,并指定build_dir足夠深,從而使評價結(jié)果顯示路徑I其實想要。這既非常hacky又非常脆弱。我希望存在更好的解決方案。
我可以精確控制 cythonize 生成的 .c 文件的位置嗎?
慕工程0101907
2021-09-14 20:52:42