2011-09-14 39 views
16

Bởi vì tôi phải cài đặt nhiều phiên bản Python trên nhiều máy chủ Oracle Linux được xây dựng thông qua một quá trình khởi động, tôi muốn xây dựng một vòng python cho kho yum của chúng tôi. Tôi đã có thể xây dựng Python bằng tay bằng cách sử dụng 'make altinstall' mà không cài đặt trên hệ thống mặc định của bạn Python cài đặt, vì vậy tôi nghĩ rằng đó sẽ là con đường để đi.RPM Python Tôi xây dựng sẽ không cài đặt

Sau nhiều thử và sai, tôi quản lý để xây dựng một rpm bắt đầu với một .bz2 python 2.7 gói - nhưng bây giờ khi tôi cố gắng để cài đặt nó, tôi nhận được một lỗi:

error: Failed dependencies: 
    /usr/local/bin/python is needed by Python-2.7.2-1.i386 

gì .. . ??? Python là những gì tôi đang cố gắng để cài đặt !!! Và mặc định hệ thống Python (2.4) là trong/usr/bin/python !!! Và vị trí tạo mẫu của tôi cho thư mục python là /tmp/python2.7 (và tệp thực thi là /tmp/python2.7/bin/python2.7). Vậy tại sao nó lại tìm trong/usr/local/bin?

Dưới đây là cốt lõi của SPEC RPM của tôi:

%prep 
%setup -q 

%build 
./configure --prefix=/tmp/python2.7 
make 

%install 

make altinstall 

tôi có một cái nhìn sâu hơn về các rpm build log và tôi thấy:

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...] 

Ok, do đó là nơi/usr/local/bin đi vào ... Bây giờ, câu hỏi là, làm cách nào để xác định các yêu cầu này? Tôi đã chỉ định điều gì đó sai? Tôi có cần ghi đè điều gì đó không?

Giống như nhiều người mới sử dụng rpm, tôi nhận được phần xây dựng, nhưng tôi không thực sự "grok" điều gì xảy ra ở cuối rpmbuild và những gì thực sự được đưa vào tệp rpm (ngoài các tệp bạn chỉ định trong% tệp) và sau đó điều gì thực sự xảy ra khi bạn thực hiện cài đặt rpm.

Có ai có thể đề xuất tại sao cài đặt của tôi không thành công hoặc những gì tôi có thể đọc để hiểu lý do xây dựng rpm của tôi yêu cầu những gì tôi đang cố gắng xây dựng?

Trả lời

18

Bạn sẽ có thể khắc phục vấn đề này bằng cách thêm dòng sau vào file spec của bạn:

AutoReq: no 

Đây là sự hiểu biết của tôi về tại sao điều này là cần thiết. Khi rpmbuild chạy trên các tệp .py với #! (shebang) nó sẽ tự động thêm nhị phân mà shebang chỉ định làm yêu cầu. Không chỉ vậy, nếu shebang là #!/usr/bin/env python, nó sẽ thêm một sự phụ thuộc cho bất cứ điều gì mà giải quyết (python đầu tiên trên $PATH).

Bạn cần phải tắt xử lý yêu cầu tự động hoặc tìm tất cả các shebang sẽ gây ra sự cố và thay đổi chúng thành một thứ khác.

+0

Âm thanh đầy hứa hẹn - Tôi sẽ thử ... – Ilane

+0

>>> in "Cảm ơn bạn, F.J !!!" Cảm ơn bạn, F.J !!! – Ilane

+1

Bạn không muốn tắt chế độ phụ thuộc trong trường hợp này. Điều này có thể phá vỡ gói python bởi vì RPM sẽ không biết những gì các tập tin như vậy gói phụ thuộc vào. Điều chính xác cần làm là vá tệp chứa dòng shebang sai. – jayhendren

6

rpmbuild có thể khá thông minh và đây là một trong những trường hợp đó. Nó có thể kéo /usr/local/bin/python từ một trong các tệp tập lệnh của bạn có chứa một cái gì đó như:

#!/usr/local/bin/python 

ở trên cùng. Hãy thử grep'ing cho đường dẫn này trong các tệp trong tệp bz2 của bạn.

+0

Có hai - tuy nhiên, tôi không muốn muck với các nguồn nếu tôi không phải kể từ khi% thiết lập được giải nén chúng từ tập tin tải xuống ban đầu - có cách nào xung quanh vấn đề này? – Ilane

+1

Đây là câu trả lời đúng. Trong mã nguồn python, có một tệp có dòng shebang chứa '/ usr/local/bin/python'. @ Ilane, điều chính xác cần làm là viết một bản vá cho mã nguồn. Một phần tiêu chuẩn của việc xây dựng RPM là viết các bản vá.Bạn sẽ lưu ý trong tệp chứa shebang vi phạm, có một nhận xét về hiệu ứng mà các trình đóng gói python sẽ cần phải viết một bản vá nếu chúng không cài đặt python vào '/ usr/local'. – jayhendren

+1

Cụ thể vấn đề là 'cgi.py'. Thông số kỹ thuật của Fedora ([python 3] (http://pkgs.fedoraproject.org/cgit/python3.git/tree/python3.spec), [python 2] (http://pkgs.fedoraproject.org/cgit/python .git/tree/python.spec)) sửa lỗi này bằng cách chạy 'Tools/scripts/pathfix.py'. –

Các vấn đề liên quan