Hoàn nguyên tùy chọn `--no-site-gói` với virtualenv


126

Tôi đã tạo một virtualenv bằng cách sử dụng --no-site-packages tùy chọn và cài đặt rất nhiều thư viện. Bây giờ tôi muốn hoàn nguyên --no-site-packagestùy chọn và sử dụng các gói toàn cầu.

Tôi có thể làm điều đó mà không cần tạo lại virtualenv?

Chính xác hơn:

Tôi tự hỏi chính xác những gì xảy ra khi tạo một virtualenv bằng cách sử dụng --no-site-packagestùy chọn thay vì không sử dụng tùy chọn đó.

Nếu tôi biết điều gì xảy ra thì tôi có thể tìm ra cách hoàn tác nó.


một câu hỏi khác được đánh dấu là trùng lặp với câu hỏi này và nó đã nhận được câu trả lời có thể thú vị ở đây.
mariotomo

Câu trả lời:


162

Hãy thử xóa (hoặc đổi tên) tệp no-global-site-packages.txttrong Libthư mục của bạn trong môi trường ảo của bạn.

Trong đó venv là tên của môi trường ảo của bạn và python3.4 tương ứng với bất kỳ phiên bản nào của python có liên quan, ví dụ:

$ rm venv/lib/python3.4/no-global-site-packages.txt

Và nếu bạn đổi ý và muốn đưa nó trở lại:

$ touch venv/lib/python3.4/no-global-site-packages.txt

Lưu ý: Nếu bạn không thấy tệp trên, thì bạn có phiên bản virtualenv mới hơn. Bạn sẽ muốn làm theo câu trả lời này thay vào đó


18
Điều đó sẽ làm điều đó. Sự tồn tại (hoặc không tồn tại) của tệp đó là tác động trực tiếp duy nhất của cờ không có gói trang web. Trang web tùy chỉnh của Virtualenv tìm tệp đó để quyết định có nên thêm các thư mục gói trang web toàn cầu vào sys.path hay không.
Carl Meyer

Xuất sắc! Điều đó đã làm nó! Cảm ơn rất nhiều vì câu trả lời đó, và cảm ơn Carl Meyer vì đã bình luận thêm.
Olivier Verdier

1
đó là virtualenv/python2.7/no-global-site-packages.txttrong máy chủ Ubuntu của tôi.
caesarsol

4
Phiên bản Windows của virtualenv chứa virtualenv/pyenv.cfgtệp. Có một tùy chọn cho gói trang web: include-system-site-packages = false Thay đổi giá trị này và gọi Activate.ps1
georgik

@georgik - mà cũng làm việc cho Linux phiên bản venvcho Python 3.4.
Tomasz Dzieniak

13

Ít nhất là đối với Python 3.5.2, có pyvenv.cfgtệp trong thư mục gốc của virtualenv. Tất cả bạn cần làm là thay đổi include-system-site-packagescờ từ falsesang true:

home = /usr/bin
include-system-site-packages = false  # <- change this to "true"
version = 3.5.2

12

Khi sử dụng virtualenvwrapper để quản lý virtualenvs, bạn có thể sử dụng chức năng shell toggleglobalsitepackagesđể chuyển đổi giữa việc sử dụng và không sử dụng các gói trang web.


2

Hãy thử thêm một liên kết tượng trưng giữa /virtualenv_root/lib//path/to/desired/site-packages/


+1 Điều này hoạt động trên hệ thống của tôi (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); Tôi không có no-global-site-packages.txtnơi nào cả.
Aaron Digulla

2

Đi đến thư mục venv của bạn và mở pyvenv.cfg. (Ví dụ: nếu môi trường ảo của bạn được gọi myenvthì tệp sẽ được đặt tại myenv\pyvenv.cfg)

Bạn sẽ thấy một thiết lập boolean được gọi là include-system-site-packages

Đặt cài đặt đó trueđể sử dụng các gói toàn cầu

Nếu bạn muốn tắt sử dụng các gói toàn cầu, chỉ cần đặt cài đặt đó thành falsethay thế.

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.