2016-04-22 12 views
17

tôi đã trăn 3.4 trong virtualenv của tôi, nhưng sau khi nâng cấp ubuntu để 16,04 python nâng cấp lên 3.5 nên python trong virtualenv tai nạn với các lỗi này:virtualenv trăn đã phá vỡ sau khi nâng cấp ubuntu 15,10-16,04

Could not find platform independent libraries <prefix> 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
Fatal Python error: Py_Initialize: Unable to get the locale encoding 
ImportError: No module named 'encodings' 

Current thread 0x00007f2f2dbcb700 (most recent call first): 
fish: “python” terminated by signal SIGABRT (Abort) 

Làm thế nào tôi có thể sửa chữa nó?

+0

Bạn đã thử cài đặt lại Python 3.5 chưa? Module 'encodings' là một phần của quá trình cài đặt cơ bản. – mprat

Trả lời

4

tôi cố định này bằng cách cài đặt tối thiểu python3.4 làm việc để virtualenv tôi làm việc đủ tốt để có được danh sách các gói, sau đó thực hiện một cái mới với python3.5 ... như sau:

Nhận python3.4 gói tối thiểu:

wget http://launchpadlibrarian.net/221250032/python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
wget http://launchpadlibrarian.net/221250033/libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
sudo dpkg -i --force-breaks libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 
sudo dpkg -i python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb 

virtualenv của tôi là ở đây: ~/virtualenv/example

lấy danh sách các gói trong virtualenv của bạn (mà bây giờ nên làm việc cũng đủ cho điều này, nhưng có thể không làm những thứ khác đúng):

source ~/virtualenv/example/bin/activate 
pip freeze > /tmp/requirements.txt 
deactivate 

Loại bỏ python3.4, để trở về Ubuntu 16.04 của nhà nước ưa thích:

sudo dpkg --purge python3.4-minimal 
sudo dpkg --force-depends --purge libpython3.4-minimal 

Thực hiện một virtualenv mới với các gói phải:

virtualenv -p python3.5 example 
source ~/virtualenv/example/bin/activate 
pip install -r /tmp/requirements.txt 

Điều đó bây giờ sẽ làm việc, với tất cả các gói cũ của bạn nhưng trong python3.5. Nên ...

Xem thêm Upgrade python in a virtualenv

1

Tôi có cùng một vấn đề và tôi giải quyết tái tạo lại toàn bộ virtualenv

PS: Xin lỗi cho tiếng Anh xấu của tôi.

+0

Làm thế nào để di chuyển dự án django sang virtualenv khác và làm cho nó hoạt động? –

0

Tôi gặp phải sự cố tương tự và tôi đã cố gắng "khắc phục" bằng cách tạo lại virtualenv và cài đặt lại các gói được yêu cầu bằng pip.

Tạo một virtualenv mới:

virtualenv <new-virtualenv> 

Kích hoạt nó:

source <new-virtualenv>/bin/activate 

Cài đặt các gói:

pip install <required-packages> 

Và tôi đã tốt để đi một lần nữa!

Bạn có thể giữ virtualenv cũ bằng cách chỉ cần đổi tên thư mục:

mv <old-virtualenv> <old-virtualenv>-backup 
+0

Có cách nào để trích xuất danh sách gói pip từ virtualenv bị hỏng không? –

1

tôi đã cùng một vấn đề ngày hôm nay và đó là cách tôi đã giải quyết nó:

Vấn đề: Thứ nhất, như Tôi hiểu, vấn đề xảy ra bởi vì sau khi nâng cấp lên Ubuntu 16.04 phiên bản trước của Python cũng nâng cấp. Kết quả là các liên kết tượng trưng bên trong bất kỳ môi trường Python3 nào cũng không hoạt động nữa.

Giải pháp 1: Vì nó được viết trên giải pháp đơn giản là xóa tất cả môi trường Python3 và tạo lại chúng. Tôi không thích nó vì nó là lần thứ hai tôi làm điều đó sau khi nâng cấp Ubuntu. Cũng có lẽ tôi cần phải sử dụng nhiều phiên bản Python 3 trong các dự án trong tương lai.

Giải pháp 2: Đó là những gì tôi đã thử hôm nay và nó hoạt động tốt. Thay vì sử dụng virtualenv + virtualenvwrapper tôi quyết định thử kết hợp của pyenv + pyenv-virtualenv.

Sự khác biệt chính giữa hai phương pháp là:

Pyenv thực bản sao toàn bộ một Python cài đặt mỗi khi bạn tạo ra một phiên bản pyenv mới. Ngược lại, virtualenv sử dụng các liên kết tượng trưng để giảm kích thước của các virtualenv của .

Howto:

  1. Install pyenv như mô tả here cùng với phiên bản yêu cầu của Python 2 và 3.
  2. Hãy xem here về cách bạn có thể làm việc với virtualenv bằng pyenv.
  3. Tạo môi trường mới, cài đặt tất cả các phụ thuộc với pip và hy vọng quên đi vấn đề liên kết bị hỏng trong quá trình nâng cấp Ubuntu tiếp theo.
0

tôi cố định nó bằng cách tạo ra một virtualenv mới và sao chép python thực thi vào virtualenv cũ bị phá vỡ.

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