bash: mkvirtualenv: không tìm thấy lệnh


100

Sau khi làm theo hướng dẫn trên bài đăng của Doug Hellmanvirtualenvwrapper , tôi vẫn không thể kích hoạt môi trường thử nghiệm.

[mpenning@tsunami ~]$ mkvirtualenv test
-bash: mkvirtualenv: command not found
[mpenning@tsunami ~]$

Cần lưu ý rằng tôi đang sử dụng WORKON_HOMEmà không phải là của tôi $HOME. Tôi đã thử tìm kiếm /usr/local/bin/virtualenvwrapper.shnhư được hiển thị trong virtualenvwrappertài liệu cài đặt , nhưng nó không tồn tại.

Tôi đang chạy CentOS 6 và python 2.6.6, nếu điều này quan trọng.


# File: ~/.bash_profile
# ...

export WORKON_HOME="/opt/virtual_env/"
source "/opt/virtual_env/bin/virtualenvwrapper_bashrc"

Câu trả lời:


107

Giải pháp 1 :

Vì một số lý do, virtualenvwrapper.shđược cài đặt trong /usr/bin/virtualenvwrapper.sh, thay vì dưới /usr/local/bin.

Sau đây trong .bash_profiletác phẩm của tôi ...

source "/usr/bin/virtualenvwrapper.sh"
export WORKON_HOME="/opt/virtual_env/"

Cài đặt của tôi dường như hoạt động tốt mà không cần tìm nguồn cung ứng virtualenvwrapper_bashrc

Giải pháp 2 :

Ngoài ra, như đã đề cập bên dưới, bạn có thể tận dụng cơ hội virtualenvwrapper.shđã có trong trình bao của bạn PATHvà chỉ cần phát hànhsource `which virtualenvwrapper.sh`


5
Đặt WORKON_HOMEthành "~ / .virtualenvs" ( giá trị mặc định ) cho phép đặt virtualenvs riêng tư
Pierre de LESPINAY

1
Nếu bạn cài đặt bằng trình quản lý gói của bản phân phối, các tệp sẽ nằm trong /usr/binđó thay vì /usr/local/bin. Nói chung, bạn không nên cho rằng cái này hay cái kia được tìm thấy; đó là một trong những lý do chúng tôi có một PATHbiến.
tripleee

Câu trả lời này dựa trên việc cài đặt virtualenvwrapper với pip, đây là điều tôi thích làm hơn.
Mike Pennington,

Nó cần phải được cài đặt trước,pip install virtualenvwrapper
Eddie

WORKON_HOMElà tùy chọn và không liên quan gì đến giải pháp.
bánh nướng

55

Thử:

source `which virtualenvwrapper.sh`

Dấu gạch ngược là sự thay thế lệnh - chúng lấy bất kỳ thứ gì chương trình in ra và đưa nó vào biểu thức. Trong trường hợp này, "cái nào" kiểm tra $ PATH để tìm virtualenvwrapper.sh và xuất ra đường dẫn đến nó. Tập lệnh sau đó được trình bao đọc thông qua 'nguồn'.

Nếu bạn muốn điều này xảy ra mỗi khi bạn khởi động lại trình bao của mình, có lẽ tốt hơn nên lấy đầu ra từ lệnh "which" trước, sau đó đặt dòng "nguồn" vào trình bao của bạn, giống như sau:

echo "source /path/to/virtualenvwrapper.sh" >> ~/.profile

^ Điều này có thể khác một chút tùy theo trình bao của bạn. Ngoài ra, hãy cẩn thận không sử dụng một> vì điều này sẽ cắt ngắn ~ / .profile: -o của bạn


4
Mặc dù đây có thể là một gợi ý có giá trị để giải quyết vấn đề, nhưng một câu trả lời thực sự cần nhiều chi tiết hơn thế này. Vui lòng chỉnh sửa để giải thích cách này sẽ giải quyết vấn đề. Ngoài ra, thay vào đó, hãy cân nhắc viết bài này dưới dạng nhận xét.
Toby Speight

1
Điều này đã giải quyết vấn đề của tôi. Nhưng ai đó sẽ giải thích tại sao và làm thế nào?
h0r53 21/02/17

1
Dấu gạch ngược là sự thay thế lệnh - chúng lấy bất kỳ thứ gì chương trình in ra và đưa nó vào biểu thức. Trong trường hợp này, "cái nào" kiểm tra $ PATH để tìm virtualenvwrapper.sh và xuất ra đường dẫn đến nó. Tập lệnh sau đó được trình bao đọc thông qua 'nguồn'.
Erich

43

Tôi đã gặp vấn đề tương tự trên OS X 10.9.1 với python 2.7.5. Không có vấn đề gì với WORKON_HOMEtôi, nhưng tôi đã phải thêm source "/usr/local/bin/virtualenvwrapper.sh"vào ~/.bash_profile(hoặc ~/.bashrctrong unix) theo cách thủ công sau khi tôi chạypip install virtualenvwrapper


1
Bạn đã thêm nguồn "/usr/local/bin/virtualenvwrapper.sh" theo cách thủ công ở đâu?
Gregology

1
@Gregology Tôi đã thêm dòng đó vào ~/.bash_profile. Lưu ý rằng khi bạn thêm lần đầu tiên, bạn sẽ phải tải lại thiết bị đầu cuối (thiết bị đang chạy .bash_profile) hoặc chỉ chạy sourcelệnh đó trực tiếp từ dòng lệnh.
Nick Benes

1
Sẽ rất hữu ích nếu bạn có tiêu đề với tên tệp và hiển thị tất cả nội dung để bạn không phải nhận các câu hỏi tiếp theo về "bạn đã đặt nó ở đâu?"
JGallardo

1
Việc bạn sử dụng .bash_profilehay .bashrckhông thực sự trực tiếp là hệ quả của việc bạn đang sử dụng nền tảng nào, mặc dù nền tảng này hay nền tảng khác có thể bị thiếu trên một số nền tảng. Xem trang hướng dẫn sử dụng Bash để biết sự khác biệt của chúng. Nói chung, bạn chỉ nên thực sự cần cái này trong của bạn .bash_profile, nhưng một số bản phân phối sử dụng các thiết lập làm phức tạp vấn đề.
tripleee

25

Điều kiện tiên quyết để thực hiện lệnh này -

  1. pip (từ viết tắt đệ quy của P ip I nstalls P ackages) là một hệ thống quản lý gói được sử dụng để cài đặt và quản lý các gói phần mềm được viết bằng Python. Nhiều gói có thể được tìm thấy trong Chỉ mục gói Python (PyPI).

    sudo apt-get install python-pip

  2. Cài đặt Môi trường ảo. Được sử dụng để tạo môi trường ảo, để cài đặt các gói và phần phụ thuộc của nhiều dự án cách ly với nhau.

    sudo pip cài đặt virtualenv

  3. Cài đặt trình bao bọc môi trường ảo Giới thiệu về trình bao bọc môi trường ảo

    sudo pip cài đặt virtualenvwrapper

Sau khi Cài đặt điều kiện tiên quyết, bạn cần đưa trình bao bọc môi trường ảo hoạt động để tạo môi trường ảo. Sau đây là các bước -

  1. đặt thư mục môi trường ảo trong biến đường dẫn- export WORKON_HOME=(directory you need to save envs)

  2. source /usr/local/bin/virtualenvwrapper.sh -p $WORKON_HOME

Như đã đề cập bởi @Mike, nguồn `virtualenvwrapper.sh` hoặc which virtualenvwrapper.shcó thể được sử dụng để định vị tệp virtualenvwrapper.sh.

Tốt nhất nên đặt hai dòng trên trong ~ / .bashrc để tránh thực hiện các lệnh trên mỗi khi bạn mở trình bao mới. Đó là tất cả những gì bạn cần để tạo môi trường bằng mkvirtualenv

Những điểm cần ghi nhớ -

  • Trong Ubuntu, bạn có thể cần cài đặt virtualenv và virtualenvwrapper làm gốc. Đơn giản chỉ cần đặt tiền tố lệnh trên bằng sudo.
  • Tùy thuộc vào quy trình được sử dụng để cài đặt virtualenv, đường dẫn đến virtualenvwrapper.sh có thể khác nhau. Tìm đường dẫn thích hợp bằng cách chạy $ find / usr -name virtualenvwrapper.sh. Điều chỉnh dòng trong tập lệnh .bash_profile hoặc .bashrc của bạn cho phù hợp.

1
Thêm một ghi chú. Trên ubuntu 18.04, tôi phải khởi động lại sau khi cài đặt và sau đó nó hoạt động.
Dan Grahn

@screenmutt Cảm ơn bạn đã đóng góp ý kiến ​​quý giá. Tôi có thể đã bỏ lỡ nó khi tôi sử dụng ubuntu 16.04. Tuy nhiên, tôi muốn biết sau bước nào thì bạn phải khởi động lại? Là sau khi cài đặt gói pip hoặc sau khi thiết lập "thư mục môi trường ảo"?
Keshav

Sau khi cài đặt trình bao bọc. Nó đã hoạt động sau đó.
Dan Grahn

1
@DanGrahn bạn không cần khởi động lại, chỉ cần chạy lại .bashrc- rõ ràng source ~/.bashrctrong thiết bị đầu cuối hiện tại của bạn hoặc mở một cửa sổ đầu cuối mới
TJ Ellis

9

Sử dụng quy trình này để tạo env ảo trong ubuntu

bước 1

Cài đặt pip

   sudo apt-get install python-pip

bước 2

Cài đặt virtualenv

   sudo pip install virtualenv

bước 3

Tạo một dir để lưu trữ virtualenvs của bạn (tôi sử dụng ~ / .virtualenvs)

   mkdir ~/.virtualenvs

hoặc sử dụng lệnh này để cài đặt phiên bản cụ thể của python trong env

virtualenv -p /usr/bin/python3.6 venv

bước 4

   sudo pip install virtualenvwrapper

bước 5

   sudo nano ~/.bashrc

bước 6

Thêm mã hai dòng này vào cuối tệp bashrc

  export WORKON_HOME=~/.virtualenvs
  source /usr/local/bin/virtualenvwrapper.sh

bước 7

Mở thiết bị đầu cuối mới (khuyến nghị)

bước 8

Tạo một virtualenv mới

  mkvirtualenv myawesomeproject

bước 9

Để tải hoặc chuyển đổi giữa các virtualenvs, hãy sử dụng lệnh workon:

  workon myawesomeproject

bước 10

Để thoát virtualenv mới của bạn, hãy sử dụng

 deactivate

và đảm bảo sử dụng pip so với pip3

HOẶC làm theo các bước dưới đây để cài đặt môi trường ảo bằng python3

Cài đặt env

python3 -m venv my-project-env

và kích hoạt môi trường ảo của bạn bằng lệnh sau:

source my-project-env/bin/activate

6

Vì tôi vừa đi dù chỉ là một cú kéo, tôi sẽ cố gắng viết câu trả lời mà tôi đã mong ước từ hai giờ trước. Điều này dành cho những người không chỉ muốn giải pháp sao chép và dán

Thứ nhất: Bạn có thắc mắc tại sao việc sao chép và dán đường dẫn hoạt động đối với một số người trong khi nó không hoạt động đối với những người khác? ** Lý do chính, các giải pháp khác nhau là các phiên bản python khác nhau, 2.x hoặc 3.x. Thực sự có các phiên bản khác nhau của virtualenv và virtualenvwrapper hoạt động với python 2 hoặc 3. Nếu bạn đang sử dụng python 2, hãy cài đặt như vậy:

sudo pip install virutalenv
sudo pip install virtualenvwrapper

Nếu bạn định sử dụng python 3, hãy cài đặt phiên bản python 3 liên quan

sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper

Bạn đã cài đặt thành công các gói cho phiên bản python của mình và tất cả đã được thiết lập, phải không? Vâng, hãy thử nó. Nhập workonvào thiết bị đầu cuối của bạn. Thiết bị đầu cuối của bạn sẽ không thể tìm thấy lệnh ( workonlà lệnh của virtualenvwrapper). Tất nhiên là sẽ không. Workonlà một tệp thực thi sẽ chỉ có sẵn cho bạn khi bạn tải / nguồn tệp virtualenvwrapper.sh. Nhưng hướng dẫn cài đặt chính thức bạn đã đề cập đến cái này, phải không ?. Chỉ cần mở .bash_profile của bạn và chèn thông tin sau, nó cho biết trong tài liệu:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

Đặc biệt là lệnh source /usr/local/bin/virtualenvwrapper.shcó vẻ hữu ích vì lệnh dường như tải / nguồn tệp mong muốn virtualenvwrapper.shchứa tất cả các lệnh bạn muốn làm việc với như workonmkvirtualenv. Nhưng vâng, không. Khi thực hiện theo hướng dẫn cài đặt chính thức, bạn rất có khả năng nhận được lỗi từ bài đầu tiên: mkvirtualenv: command not found. Vẫn không có lệnh nào được tìm thấy và bạn vẫn thất vọng. Vậy vấn đề ở đây là gì? Vấn đề là virtualenvwrapper.sh không phải là bạn đang tìm kiếm nó ngay bây giờ. Lời nhắc ngắn ... bạn đang xem ở đây:

source /usr/local/bin/virtualenvwrapper.sh

Nhưng có một cách khá đơn giản để tìm tệp mong muốn. Chỉ loại

which virtualenvwrapper

đến thiết bị đầu cuối của bạn. Thao tác này sẽ tìm kiếm PATH của bạn cho tệp, vì nó rất có thể nằm trong một số thư mục được bao gồm trong PATH của hệ thống của bạn.

Nếu hệ thống của bạn rất lạ, tệp mong muốn sẽ ẩn bên ngoài thư mục PATH. Trong trường hợp đó, bạn có thể tìm thấy đường dẫn đến virtalenvwrapper.shbằng lệnh shellfind / -name virtualenvwrapper.sh

Kết quả của bạn có thể trông giống như sau: /Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh Xin chúc mừng. You have found your missing file!. Bây giờ tất cả những gì bạn phải làm là thay đổi một lệnh trong .bash_profile của bạn. Chỉ là sự thay đổi:

source "/usr/local/bin/virtualenvwrapper.sh"

đến:

"/Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh"

Xin chúc mừng. Virtualenvwrapper hiện hoạt động trên hệ thống của bạn. Nhưng bạn có thể làm một điều nữa để nâng cao giải pháp của mình. Nếu bạn đã tìm thấy tệp virtualenvwrapper.shbằng lệnh, which virtualenvwrapper.shbạn biết rằng nó nằm trong một thư mục của PATH. Vì vậy, nếu bạn chỉ ghi tên tệp, hệ thống tệp của bạn sẽ giả sử tệp nằm trong thư mục PATH. Vì vậy, bạn không cần phải viết ra đường dẫn đầy đủ. Chỉ loại:

source "virtualenvwrapper.sh"

Đó là nó. Bạn không còn bực bội. Bạn đã giải quyết được vấn đề của mình. Hy vọng.


Tôi thực sự vừa sao chép và đánh giá cao giải pháp của bạn
johnny 5

2

Để cài đặt thành công virtualenvwrappertrên Ubuntu 18.04.3, bạn cần làm như sau:

  1. Tải về virtualenv

    sudo apt install virtualenv
  2. Tải về virtualenvwrapper

    sudo pip install virtualenv
    sudo pip install virtualenvwrapper
  3. Thêm phần sau vào cuối .bashrctệp

    export WORKON_HOME=~/virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
    source ~/.local/bin/virtualenvwrapper.sh
  4. Thực thi .bashrctệp

    source ~/.bashrc
  5. Tạo virtualenv của bạn

    mkvirtualenv your_virtualenv

cũng hoạt động trên ubuntu 20.04. một điều chỉnh nhỏ tho: WORKON_HOME=~/.virtualenvslà mặc định. không cần thiết lập điều đó. VIRTUALENVWRAPPER_PYTHON=/usr/bin/pythoncũng là mặc định, nhưng khi sử dụng python3, điều này rất hữu ích. cũng nên sử dụng export PATH="$HOME/.local/bin:$PATH"cho các đường dẫn nhị phân python
bánh nướng

1

Trên Windows 7 và Git Bash, điều này giúp tôi:

  1. Tạo tệp ~ / .bashrc (trong thư mục chủ người dùng của bạn)
  2. Thêm xuất dòng WORKON_HOME = $ HOME / .virtualenvs (bạn phải tạo thư mục này nếu nó không tồn tại)
  3. Thêm nguồn dòng "C: \ Program Files (x86) \ Python36-32 \ Scripts \ virtualenvwrapper.sh" (thay đổi đường dẫn cho virtualenvwrapper.sh của bạn)

Khởi động lại git bash và lệnh mkvirtualenv của bạn bây giờ sẽ hoạt động tốt.


1

Sử dụng Git Bash trên Windows 10 và Python36 dành cho Windows, tôi đã tìm thấy virtualenvwrapper.sh ở một nơi hơi khác và chạy điều này đã giải quyết được sự cố

source virtualenvwrapper.sh 
/c/users/[myUserName]/AppData/Local/Programs/Python36/Scripts

0

Đã khắc phục sự cố của tôi trong Hệ điều hành Ubuntu 14.04 với python 2.7.6, bằng cách thêm hai dòng bên dưới vào tệp ~ / .bash_profile (hoặc ~ / .bashrc trong unix).

nguồn "/usr/local/bin/virtualenvwrapper.sh"

xuất WORKON_HOME = "/ opt / virtual_env /"

Và sau đó thực hiện cả hai dòng này trên thiết bị đầu cuối.


0

Trên Windows 10, để tạo môi trường ảo, tôi thay thế " pip mkvirtualenv myproject" bằng " mkvirtualenv myproject" và điều đó hoạt động tốt.

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.