2015-07-11 13 views
8

Tôi đã cố gắng biên dịch Python 2.7 từ nguồn.
Dưới đây là lệnh của tôi:Báo cáo nhị phân Python biên dịch phiên bản sai

./configure --prefix=/my/local/dir --exec-prefix=/my/local/dir --enable-shared --with-pydebug 
make 
make install 

Và đầu ra của which python/my/local/dir/bin/python, đó là chính xác.

Nhưng khi tôi chạy python --version Tôi thấy Python 2.7.3 thay vì Python 2.7.10.

Phiên bản hệ thống của Python là 2.7.3. Nó có thể là phiên bản hệ thống của Python bằng cách nào đó liên kết chính nó chống lại các phiên bản địa phương, biên dịch? Hay tôi đang làm gì sai?

Edit:

Kết quả của ./my/local/dir/bin/python --version cũng là Python 2.7.3

Chỉnh sửa 2:

Có vẻ như nếu tôi thoát khỏi --enable-shared cờ nó sẽ sản xuất phiên bản đúng của Python, nhưng tôi cần lá cờ đó cho phần mềm khác của tôi hoạt động.

+0

Điều gì xảy ra nếu bạn chạy '/ my/local/dir/bin/python --version'? Nếu trường hợp này là chính xác, thì trình bao của bạn chỉ đơn giản là lưu vào bộ nhớ đệm vị trí của 'python', như o11c đã đề cập. – Laogeodritt

+0

@Laogeodritt Đầu ra vẫn là 'Python 2.7.3' – mpang

+0

Trên một số hệ thống,' which' được thực hiện như một chương trình thay vì một shell được xây dựng và có thể không cho bạn biết shell thực sự sẽ chạy. Tốt nhất để xem bất kỳ lệnh nào cho bạn biết shell thực sự nghĩ gì. Đối với 'bash', lệnh đó là' type'. Nhìn vào 'loại trợ giúp' để biết thêm. –

Trả lời

4

Vì vậy, this post có thể khắc phục được sự cố của tôi. Để trích dẫn nguồn:

Nếu bạn cố gắng chạy tập tin python có thể chia sẻ từ thư mục xây dựng của nó, bạn cần phải nói trình tải động nơi tìm thư viện được chia sẻ, tức là thư mục xây dựng . Một cách để làm điều đó là sử dụng biến môi trường LD_LIBRARY_PATH. Nếu không, trình nạp động sẽ tìm kiếm các đường dẫn chuẩn, như/usr/local/lib/và/usr/lib/cho một thư viện được chia sẻ với tên thích hợp (như libpython2.7.so.1.0). Nếu có một Python cũ đã được cài đặt với tên đó và nếu ABI không thay đổi quá nhiều, bạn có thể may mắn và nó sẽ tải và chạy.

+0

Có vẻ như một 'export LD_LIBRARY_PATH = .' là bắt buộc để thực hiện công việc này. –

1

Đó là khả năng bạn cần phải thay đổi biến PYTHONHOME môi trường nên nó sử dụng phiên bản mới:

export PYTHONHOME=/my/local/dir/ 

https://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME

* Nếu bạn muốn thực hiện thay đổi vĩnh viễn cân nhắc việc thêm nó vào hồ sơ vỏ của bạn.

2

Hãy nhớ rằng các bộ đệm lưu vào bộ nhớ cache vị trí của các tệp nhị phân thay vì tìm kiếm trong PATH mỗi lần.

Vì vậy, nếu bạn đã chạy python trước đây trong cùng một trình bao, nó sẽ vẫn sử dụng phiên bản cũ.

Sử dụng hash -r để khắc phục điều này mà không cần bắt đầu trình bao mới.

+0

Tôi đã thử điều đó và nó không hoạt động. Và tôi chạy './my/local/dir/bin/python --version' và nó vẫn cho' Python 2.7.3' – mpang

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