Làm cách nào để bạn đặt đường dẫn python của mình trong virtualenv đã được tạo?


106

Tôi phải chỉnh sửa tệp nào và làm thế nào? Tôi đã tạo ra một môi trường ảo.


kiểm tra xem nó có trỏ đến đúng thư mục không. Nếu bạn chưa có, hãy nhấp vào nút Mới và tạo nó.

11
Sử dụng lệnh add2virtualenv .
s29,

5
add2virtualenv là một virtualenvwrapperlệnh. Nó không phải là một phần của virtualenv.
kojiro

Câu trả lời:


124

CHỈNH SỬA # 2

Câu trả lời đúng là của @ arogachev .


Nếu bạn muốn thay đổi dòng PYTHONPATHđược sử dụng trong virtualenv, bạn có thể thêm dòng sau vào bin/activatetệp virtualenv của mình :

export PYTHONPATH="/the/path/you/want"

Bằng cách này, cái mới PYTHONPATHsẽ được thiết lập mỗi khi bạn sử dụng virtualenv này.

CHỈNH SỬA: (để trả lời bình luận của @ RamRachum)

Để khôi phục lại giá trị ban đầu deactivate, bạn có thể thêm

export OLD_PYTHONPATH="$PYTHONPATH"

trước dòng đã đề cập trước đó và thêm dòng sau vào bin/postdeactivatetập lệnh của bạn .

export PYTHONPATH="$OLD_PYTHONPATH"

1
Nó cũng sẽ bị xóa vào deactivate?
Ram Rachum

1
Vì vậy, điều này có nghĩa là một enviromnent ảo mới được tạo có giá trị mặc định PYTHONPATH(toàn cầu) thay vì đường dẫn cục bộ virtualenv?
ducin

6
Điều này làm việc rất tốt cho tôi, tôi không sử dụng virtualenvwrapper. Chỉ lưu ý rằng tôi không có tập lệnh bin / postdeactivate như vậy, rathere kích hoạt có chức năng hủy kích hoạt. Vì vậy, dòng mã nên được đặt ở đó, cẩn thận bọc nó trong một câu lệnh if như phần còn lại của các hoạt động trong hàm.
Niccolò

2
Có vẻ kỳ lạ khi virtualenv không làm điều này theo mặc định.
Seth

2
Chỉnh sửa # 2 là một lời nói dối! :) Câu trả lời đúng là @ Arjen-p-de-Vries của một người
Berriel

73

Nhận xét của @ s29 phải là một câu trả lời:

Một cách để thêm thư mục vào môi trường ảo là cài đặt virtualenvwrapper (rất hữu ích cho nhiều thứ) và sau đó thực hiện

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Nếu bạn muốn xóa các đường dẫn này, hãy chỉnh sửa tệp myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

Có thể tìm thấy tài liệu về virtualenvwrapper tại http://virtualenvwrapper.readthedocs.org/en/latest/

Tài liệu cụ thể về tính năng này có thể được tìm thấy tại http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv


6
để loại bỏ:add2virtualenv -d
thecheech

1
vừa liên kết câu trả lời này trong của tôi, vì nó tốt hơn nhiều
mdeous

27

Bạn có thể tạo một .pthtệp chứa thư mục để tìm kiếm và đặt nó vào site-packagesthư mục. Ví dụ:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

Hiệu ứng giống như việc thêm /some/library/pathvào sys.pathvà giữ nguyên cục bộ cho virtualenvthiết lập.


7
Tôi thực sự thích cách tiếp cận này; gần như không thay đổi như thêm dòng để kích hoạt / hủy kích hoạt và không yêu cầu sử dụng virtualenvwrapper. Nếu bạn không muốn gọi python để tìm dir gói trang, nó ở đường dẫn khá dễ đoán $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Tài liệu trên tệp .pth: docs.python.org/3.6/library/site.html
Alec

2
Tôi không muốn nhập một đường dẫn tuyệt đối, vì không gian làm việc của tôi di chuyển xung quanh hệ thống tệp của tôi. Và, đường dẫn dự án của tôi có khoảng trống. Vì vậy, tôi đã nhập lệnh được sửa đổi một chút: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdSau đó, tôi hủy kích hoạt virtualenv của mình và kích hoạt lại. Bây giờ tôi có thể chạy mã dự án yêu cầu biết thư mục dự án của tôi ở đâu.
Jim DeLaHunt

4
Đây là câu trả lời chính xác. Sửa đổi tập lệnh do nhà cung cấp cung cấp ( /bin/activate) là một sơ suất và việc cài đặt các công cụ của bên thứ 3 kém hơn so với việc sử dụng cách tích hợp sẵn để đạt được điều tương tự.
Red

2
  1. Khởi tạo virtualenv của bạn
cd venv

source bin/activate
  1. Chỉ cần đặt hoặc thay đổi đường dẫn python của bạn bằng cách nhập lệnh sau:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. để kiểm tra đường dẫn python, hãy nhập vào python:
   python

      \>\> import sys

      \>\> sys.path

1

Tôi đã sửa đổi tập lệnh kích hoạt của mình để tạo nguồn cho tệp .virtualenvrc, nếu nó tồn tại trong thư mục hiện tại và để lưu / khôi phục PYTHONPATHkhi kích hoạt / hủy kích hoạt.

Bạn có thể tìm thấy activatetập lệnh được vá ở đây. . Nó thay thế cho tập lệnh kích hoạt được tạo bởi virtualenv 1.11.6.

Sau đó, tôi đã thêm một cái gì đó như thế này vào .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"

-20

Nó đã được trả lời ở đây -> Môi trường ảo (python) của tôi có khiến PYTHONPATH của tôi bị hỏng không?

UNIX / LINUX

Thêm "export PYTHONPATH = / usr / local / lib / python2.0" vào tệp ~ / .bashrc và tạo nguồn bằng cách nhập "source ~ / .bashrc" OR ". ~ / .Bashrc".

WINDOWS XP

1) Đi tới Bảng điều khiển 2) Nhấp đúp vào Hệ thống 3) Chuyển đến tab Nâng cao 4) Nhấp vào Biến môi trường

Trong cửa sổ Biến hệ thống, hãy kiểm tra xem bạn có biến có tên PYTHONPATH hay không. Nếu bạn đã có, hãy kiểm tra xem nó có trỏ đến đúng các thư mục hay không. Nếu bạn chưa có, hãy nhấp vào nút Mới và tạo nó.

MÃ PYTHON

Ngoài ra, bạn cũng có thể thực hiện bên dưới mã của mình: -

import sys
sys.path.append("/home/me/mypy") 

4
-1: Điều này giải quyết PYTHONPATH của người dùng, không phải PYTHONPATH của virtualenv.
twneale
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.