Tại sao gói Python này cố gắng sử dụng gcc không tồn tại?


8

Tôi đang cố gắng cài đặt PyCrypto cho Python 3 trên Solaris. Cho dù tôi thực hiện điều đó thông qua " python3 setup.py install" hoặc " pip3 install pycrypto", tôi cũng gặp phải vấn đề tương tự: một cuộc gọi được thực hiện cho một gcc không tồn tại:

python3 setup.py install
[...]
/opt/csw/bin/gcc-4.8 -pipe -m32 -march=pentiumpro -Wno-unused-result -fwrapv -Wall -Wstrict-prototypes -pipe -m32 -march=pentiumpro -I/usr/include/gmp -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/ -I/opt/csw/include/python3.3m -c src/_fastmath.c -o build/temp.solaris-2.11-i86pc.32bit-3.3/src/_fastmath.o
unable to execute /opt/csw/bin/gcc-4.8: No such file or directory

Bây giờ, tôi không biết gì về lịch sử của chiếc máy mà tôi đang sử dụng. Có thể /opt/csw/bin/gcc-4.8 đã tồn tại ở một số thời điểm trong quá khứ. Nhưng nó không còn nữa. export CC=/usr/bin/gcc (hoặc một số gcc khác) KHÔNG khắc phục sự cố --- mà không bị lỗi /opt/csw/bin/gcc-4.8 được gọi.

Tôi ít quan tâm đến việc cài đặt PyCrypto và quan tâm nhiều hơn đến việc hiểu TẠI SAO cuộc gọi không có thật này được thực hiện để bắt đầu. Giá trị "/opt/csw/bin/gcc-4.8" được lưu ở đâu? Làm thế nào / nơi mà hệ thống thậm chí có được thông tin để nghĩ rằng nó cần phải gọi trình biên dịch đó?

Điều duy nhất tôi có thể nghĩ là Python3 ban đầu được biên dịch với /opt/csw/bin/gcc-4.8 và Python3 đã bị đốt cháy vĩnh viễn ở một nơi nào đó mà /opt/csw/bin/gcc-4.8 là trình biên dịch được sử dụng cho công cụ biên dịch. Nếu đây là trường hợp, tốt nhất tôi nên gỡ bỏ và cài đặt lại Python3 để thoát khỏi sự phụ thuộc sai lầm này?


Tôi đoán rằng nó có thể có cái gì đó để làm với distutils? Xem thêm: stackoverflow.com/questions/5967065/
Ấn

1
Tôi đề nghị một con trỏ đến nguồn? Ngoài ra, nhìn vào hoặc dán setup.pyđể bắt đầu với.
Faheem Mitha

nội dung setup.py tại đây: github.com/dlitz/pycrypto/blob/master/setup.py Không có tài liệu tham khảo trực tiếp đến gcc. Nhưng "xây dựng" là một phần của "distutils" nên có lẽ @jmunsch đang đi đúng hướng.
CptSupermrkt

distutils.sysconfig dường như chỉ ra rằng nó nên tôn trọng biến môi trường CC: /
CptSupermrkt

Chỉ để chắc chắn rằng bạn không sử dụng sudo, phải không?
Piotr Dobrogost

Câu trả lời:


1

/opt/csw/bin/gcc-4.8 đường dẫn chỉ ra OpenCSW được cài đặt sẵn với bản phân phối của Oracle (bản 4.8 bị xóa hoặc có phiên bản khác).

Hãy thử thiết lập các biến CCCXXmôi trường từ bên trong setup.pyvới os.environ:

os.environ["CC"] = "g++-4.7" os.environ["CXX"] = "g++-4.7"

(4.7 là phiên bản của tôi g++, đặt nó thành những gì bạn có trong /bin).


0

Tạo một liên kết mềm tại /opt/csw/bin/gcc-4.8các điểm đó đến trình biên dịch cchoặc gcctrình biên dịch của bạn , có thể?


Đây là một câu hỏi nhiều hơn là một câu trả lời. Vui lòng xem lại: Làm thế nào để tôi viết một câu trả lời tốt . Và cập nhật câu trả lời của bạn với một số ví dụ và nhiều lời giải thích. Cảm ơn.
devnull 12/2/2015

Điều đó không có khả năng làm việc vì các gcctùy chọn dòng lệnh là khác nhau. Một tập lệnh loại bỏ các tùy chọn dành riêng cho gcc và sau đó gọi trình biên dịch có sẵn có thể hoạt động.
Anthon

@DevNull Đây là một câu hỏi như thế nào? Có vẻ như nó sẽ hoạt động tốt, mặc dù có một chút hack
Michael Mrozek

@MichaelMrozek, vâng nó có thể. Nhưng có vẻ như WayneB đang yêu cầu OP cố gắng tạo một liên kết mềm maybe?, hơn là chỉ ra cách tạo một liên kết như vậy và làm thế nào nó có thể giúp ích. Tôi rút lại nhận xét của mình nếu tôi là người duy nhất cảm thấy như vậy.
devnull
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.