2014-04-03 14 views
8

Tôi sử dụng autoenv để tự động kích hoạt virtualenv. thư mục trên Python dự án có .env tập tin với nội dung sauautoenv thực thi ngay cả trong thư mục con

source venv/bin/activate 

Lệnh này thực hiện bất cứ khi nào cd đến bất kỳ thư mục phụ của dự án. Sau đó ném

-bash: venv/bin/activate: No such file or directory 

Nó thất bại vì nó đang cố gắng để thực hiện activate tương đối so với thư mục phụ. Tại sao nó thực hiện ngay cả trong thư mục con? Cách giải quyết vấn đề này?

Trả lời

6

Đã xảy ra sự cố này ngay hôm nay. Câu trả lời hiện tại không giải quyết thực tế là môi trường được kích hoạt mỗi khi bạn cd vào thư mục con hoặc quay lại thư mục gốc. Giải quyết nó như sau .env kịch bản:

venv=venv 
currentvenv="" 

if [[ $VIRTUAL_ENV != "" ]] 
then 
    # Strip out the path and just leave the env name 
    currentvenv="${VIRTUAL_ENV##*/}" 
fi 

if [[ "$currentvenv" != "$venv" ]] 
then 
    echo "Switching to environment: $venv" 
    workon $venv 
#else 
# echo "Already on environment $venv" 
fi 

Thay venv với tên của môi trường của bạn. Bạn có thể bỏ ghi chú khối khác để thấy rằng nó không cố gắng kích hoạt môi trường mọi lúc, với điều kiện môi trường mong muốn đã được kích hoạt.

Lưu ý: Nếu bạn không sử dụng virtualenvwrapper thì bạn nên thay thế lệnh workon bằng bất kỳ lệnh nào bạn đang sử dụng để kích hoạt môi trường ảo của mình. Tôi khuyên bạn nên sử dụng virtualenvwrapper.

0

Trong rễ không gian làm việc của bạn, một .env chứa:

test (command -v deactivate) && deactivate 

và trong mỗi thư mục dự án có liên quan của bạn:

workon venv_of_project 

Như this person points out, nó có nghĩa là cd ing xung quanh trong một dự án sẽ biến không gian làm việc và tắt, nhưng ít nhất nó là đơn giản và rất rõ ràng những gì đang xảy ra.

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