Có cách nào để buộc trình biên dịch một cách rõ ràng để xây dựng các phần mở rộng của Cython khi chạy python setup.py install
không? Nơi setup.py
có dạng:Buộc trình biên dịch khi chạy python setup.py cài đặt
import os.path
import numpy as np
from setuptools import setup, find_packages, Extension
from Cython.Distutils import build_ext
setup(name='test',
packages=find_packages(),
cmdclass={'build_ext': build_ext},
ext_modules = [ Extension("test.func", ["test/func.pyx"]) ],
include_dirs=[np.get_include()]
)
Tôi đang cố gắng để cài đặt một gói phần mềm trên Windows 8.1 x64 sử dụng Anaconda 3.16, Python 3.4, setuptools 18, numpy 1.9 và Cython 0.24. Kịch bản triển khai được điều chỉnh từ câu trả lời của Cython wiki và this Stack Overflow.
Makefile.bat
:: create and activate a virtual environement with conda
conda create --yes -n test_env cython setuptools=18 pywin32 libpython numpy=1.9 python=3
call activate test_env
:: activate the MS SDK compiler as explained in the Cython wiki
cd C:\Program Files\Microsoft SDKs\Windows\v7.1\
set MSSdk=1
set DISTUTILS_USE_SDK=1
@call .\Bin\SetEnv /x64 /release
cd C:\test
python setup.py install
Vấn đề là trong trường hợp này setup.py install
vẫn sử dụng trình biên dịch mingw kèm conda thay cho MS Windows SDK 7.1 một.
Vì vậy, các
DISTUTILS_USE_SDK=1
vàMSSdk=1
dường như không có tác động trên buid. Tôi không chắc chắn nếu kích hoạt MS SDK từ bên trong một conda virtualenv có thể là một vấn đề ở đây.Chạy
python setup.py build_ext --compiler=msvc
xây dựng tiện ích mở rộng một cách chính xác với trình biên dịch MS, nhưng sau đó chạy lạisetup.py install
, biên dịch lại bằng mingw. Tương tự áp dụng chopython setup.py build --compiler=msvc
.Cũng thử chạy
%COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd"
như được thảo luận trong câu trả lời được liên kết ở trên, nhưng đối với tôi, điều này tạo ra lời nhắc thiết bị đầu cuối mới, được tô màu vàng và dừng quá trình cài đặt.
Có cách nào buộc trình biên dịch xây dựng gói này, ví dụ: bằng cách chỉnh sửa setup.py
?
Hãy thử sử dụng 'python setup.py build_ext --compiler = msvc --force' để buộc trình biên dịch tạo/xây dựng lại gói và xem điều gì xảy ra. – romeric
@romeric Vì vậy, 'build_ext' xây dựng phần mở rộng với MS VC như mong đợi (cả có và không có cờ' --force'). Vấn đề là khi tôi chạy 'install' nó được xây dựng lại với mingw. – rth