Trên Debian, làm cách nào để thêm gói Python trong gói distro vào virtualenv?


7

Đưa ra một số gói python trong /usr/share/pyshared/hoặc /usr/lib/pythonX.Y/dist-packages/(lấy python-numpyhoặc python-scipyví dụ), làm cách nào để thêm gói đó vào virtualenv?

Khi thêm gói vào virtualenv, nó có yêu cầu nó sử dụng phương thức cài đặt python "bình thường" ( setpy.pyv.v.) để cài đặt hay không?

Về cơ bản, tôi muốn để có thể dễ dàng thêm các gói python, mà có phần mở rộng C rất phức tạp ( numpy, scipy, pyQt/pyside, pygtkvv), để một virtualenv.



@sr_ Đó là thảo luận về --system-site-packagestùy chọn, bao gồm tất cả các gói trong gói-gói / gói trang web. Tôi muốn chỉ bao gồm một gói.
James Tocknell

Câu trả lời:


3

Như bạn đã chỉ định làm một bánh xe thường là tốt nhất, đặc biệt là nếu bạn cài đặt lại một cách thường xuyên.

Đối với các ràng buộc gtk của python, điều này không phù hợp với tôi và tôi cần một số cách để kiểm tra mã bằng cách sử dụng tox(xây dựng các virtualenv cho bạn với các gói --no-site). Đối với mục đích thử nghiệm, nó sẽ đủ tốt (đối với tôi) để liên kết trong các phiên bản cài đặt hệ thống có liên quan, nhưng không phải mọi thứ từ site-packages/ dist-packages.

Để làm điều này, tôi đã tạo ra một gói có thể cài đặt ( ruamel.venvgtk), thiết lập các liên kết thích hợp cho Python2.7 và Python3.4 trên các hệ thống dựa trên Debian (Ubuntu, Linux Mint). Nó làm như vậy trong quá trình thiết lập chương trình, do đó không cần phải thay đổi chương trình của bạn. Phần của tox.initệp depstrông như sau:

deps =
    pytest
    ruamel.venvgtk

và đối với mọi virtualenv được tạo pipsẽ cài đặt ruamel.venvgtkvà tạo các liên kết có liên quan.


Điều đó thật tuyệt. Cá nhân, tôi hy vọng rằng pgi thành công, nhưng tôi không giữ nhiều hy vọng cho pygir-ctypes thì không.
James Tocknell

@aragilar cho Python3 Tôi liên kết trong githư viện. Tôi đã không nhìn thấy pgi trước đây. Tôi chỉ sử dụng pygtk cho một vài dự án, nhưng bị kích thích rằng tôi không thể thử nghiệm nó tox, do đó việc tạo ra gói đó
Anthon

1

Có, khi virtualenv của bạn đang hoạt động, bạn cần cài đặt gói yêu cầu của mình bằng cách sử dụng phương pháp cài đặt Python "bình thường" ( python setup.py installhoặc bằng công cụ nhận biết virtualenv (ví dụ pip install package).

Phiên bản của gói bạn cài đặt sẽ là phiên bản gói hoạt động cho virtualenv. Việc bạn tạo virtualenv không quan trọng virtualenv MY_ENVhay không virtualenv --no-site-packages MY_ENV. Trong trường hợp đầu tiên, tất cả các gói được cài đặt trong hệ thống của bạn Python sẽ có sẵn trong virtualenv, nhưng bất kỳ gói nào bạn cài đặt trong virtualenv sẽ che dấu phiên bản trong Python hệ thống của bạn trong khi virtualenv đang hoạt động. Trong trường hợp thứ hai, bạn sẽ có một môi trường Python bị cô lập trong virtualenv, chỉ với các gói thư viện tiêu chuẩn và bất cứ thứ gì bạn cài đặt có sẵn.

Xin lưu ý rằng các gói như Numpy và Scipy không cung cấp các tệp nhị phân dựng sẵn trên Linux, vì vậy bạn sẽ cần phải tự mình xây dựng chúng nếu bạn không muốn sử dụng các phiên bản có sẵn thông qua trình quản lý gói của mình.


Tôi biết cách cài đặt các gói python, và đã xây dựng numpy, scipy, vv trước đây khá nhiều lần. Tôi chỉ muốn sử dụng các phiên bản hệ thống của một số thư viện python. Câu hỏi là làm thế nào để tôi chỉ thêm một số thư viện python hệ thống, không phải tất cả (điều mà tôi cũng đã làm trước đây).
James Tocknell

Ngoài ra, "bình thường" có nghĩa là bao gồm việc sử dụng distutils, setuptools / phân phối, numpy.distutils, easy_install, bao bì, bento, v.v., trái ngược với thao tác đường dẫn, gây rối với importlib và tương tự.
James Tocknell

Nếu bạn không muốn làm $ virtualenv --no-site-packages MY_ENV cd MY_ENV source bin/activatevà cài đặt các gói. Cách duy nhất tôi có thể thấy để thực hiện những gì bạn yêu cầu là tạo virtualenv --no-site-packagesvà sau đó sao chép các thư mục gói có liên quan từ các gói trang web hệ thống của bạn sang các gói trang web trong virtualenv ..
scottza

1

Tôi cho rằng vì câu hỏi này đã không có bất kỳ hoạt động nào trong hơn một năm (kể từ tháng 3 năm 2014), không ai có câu trả lời vì vậy tôi sẽ viết cách tôi giải quyết vấn đề.

Đối với các gói có phương thức cài đặt nguồn tôn trọng virtualenvs (numpy / scipy, pyside), hãy sử dụng các bánh xe để tránh phải xây dựng lại trong mỗi venv.

Đối với các gói không (GTK), nó phụ thuộc vào cách chúng móc vào trăn.

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.