Tôi đang cố gắng sử dụng mô -đun pytools trong VirtualENV do Nervana tạo ra cho gói học tập sâu neon của họ, nhưng dường như không thể tìm thấy pytools hoặc pip nó. Khi tôi vào ảo của mình, tôi thấy hành vi này:
me@ARL--M6800:~/Downloads/neon$ source .venv/bin/activate
[.venv] me@ARL--M6800:~/Downloads/neon$ python
Python 2.7.6 [default, Jun 22 2015, 17:58:13]
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pytools
Traceback [most recent call last]:
File "", line 1, in
ImportError: No module named pytools
>>>
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages', '/home/me/Downloads/neon',
'/home/me/Downloads/neon/.venv/lib/python2.7',
'/home/me/Downloads/neon/.venv/lib/python2.7/plat-x86_64-linux-gnu',
'/home/me/Downloads/neon/.venv/lib/python2.7/lib-tk',
'/home/me/Downloads/neon/.venv/lib/python2.7/lib-old',
'/home/me/Downloads/neon/.venv/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/home/me/Downloads/neon/.venv/local/lib/python2.7/site-packages',
'/home/me/Downloads/neon/.venv/lib/python2.7/site-packages']
[.venv] me@ARL--M6800:~/Downloads/neon$ pip install pytools
Requirement already satisfied [use --upgrade to upgrade]: pytools in
/usr/local/lib/python2.7/dist-packages/pytools-2016.1-py2.7.egg
Requirement already satisfied [use --upgrade to upgrade]:
decorator>=3.2.0 in /usr/local/lib/python2.7/dist-packages [from pytools]
Requirement already satisfied [use --upgrade to upgrade]: appdirs>=1.4.0
in /usr/local/lib/python2.7/dist-packages/appdirs-1.4.0-py2.7.egg [from
pytools]
Requirement already satisfied [use --upgrade to upgrade]: six>=1.8.0 in
/usr/local/lib/python2.7/dist-packages [from pytools]
Requirement already satisfied [use --upgrade to upgrade]: numpy>=1.6.0 in
/usr/local/lib/python2.7/dist-packages [from pytools]
Vì vậy, tôi không thể nhập pytools
vì không có trên hệ thống của tôi. Theo pip
, nó được cài đặt trong thư mục /usr/local/lib/python2.7/dist-packages/pytools-2016.1-py2.7.egg
, để lại cho tôi 3 câu hỏi:
Đầu tiên: Tại sao ảo của tôi có thể thấy các gói toàn hệ thống của tôi? Tôi nghĩ rằng mặc định là không nhìn thấy chúng. Khi tôi nhìn vào Makefile được sử dụng để tạo VirtualEnv, tôi thấy điều này: Why can my virtualenv see my system-wide packages? I thought the default was not to see them. When I look at the Makefile used to create the virtualenv, I see this
# where our installed python packages will live
VIRTUALENV_DIR := .venv
VIRTUALENV_EXE := virtualenv -p python2.7 # use pyvenv for python3 install
ACTIVATE := $[VIRTUALENV_DIR]/bin/activate
mà sẽ cho tôi hành vi mặc định.
Thứ hai: Tại sao có các thư mục egg
trong các gói hàng hóa của tôi? Điều này không làm cho việc tìm thấy các mô -đun đó khó hơn? .: Why are there egg
directories in my dist-packages dir? Doesn't this make it harder to find those modules? [Though apparently, the sys.path for my system environment python has been updated to search in the egg dir. When/How???]
Thứ ba: Cách hiệu quả để sửa chữa mọi thứ để VirtualEnv của tôi sẽ có quyền truy cập vào pytools là gì?: What is an efficient way of fixing things so that my virtualenv will have access to pytools?
[Tôi đã đánh số danh sách của mình thay vì thứ nhất/thứ hai/thứ ba, nhưng sau đó mã Makefile tôi đã chèn không định dạng
Nó không phải là hiếm khi Pythonistas mới gặp khó khăn trong việc cài đặt các gói và sử dụng các mô -đun của chúng. Lỗi bực bội như thế này thường phát sinh, ngay cả khi bạn nghĩ rằng bạn đã cài đặt một gói đúng cách:packages and using their modules. Frustrating errors like this often arise, even if you think you’ve installed a package properly:
>>>
ImportError: No module named
Điều này được gây ra bởi thực tế là phiên bản Python mà bạn đang chạy tập lệnh của bạn không được cấu hình để tìm kiếm các mô -đun nơi bạn đã cài đặt chúng. Điều này xảy ra khi bạn sử dụng cài đặt sai pip
để cài đặt các gói.
Nói chung, mỗi cài đặt Python đi kèm với pip
có thể thực thi riêng, được sử dụng để cài đặt các gói. Theo mặc định, pip
thực thi sẽ cài đặt các gói ở vị trí nơi cài đặt Python cụ thể đó có thể tìm thấy chúng.
Vấn đề là rất phổ biến khi cài đặt nhiều phiên dịch viên python [và bằng cách mở rộng, nhiều ____4 thực thi.] Tùy thuộc vào đường dẫn của shell của bạn, chạy pip
có thể gọi pip
có thể thực thi được liên kết với phiên bản Python mà bạn đang sử dụng hoặc cái khác. Nếu pip
sai được gọi, thì các gói mà nó cài đặt có thể sẽ không hiển thị cho trình thông dịch Python mà bạn sử dụng, gây ra
# where our installed python packages will live
VIRTUALENV_DIR := .venv
VIRTUALENV_EXE := virtualenv -p python2.7 # use pyvenv for python3 install
ACTIVATE := $[VIRTUALENV_DIR]/bin/activate
4.Để sử dụng phiên bản pip
cụ thể cho phiên bản Python mong muốn của bạn, bạn có thể sử dụng
# where our installed python packages will live
VIRTUALENV_DIR := .venv
VIRTUALENV_EXE := virtualenv -p python2.7 # use pyvenv for python3 install
ACTIVATE := $[VIRTUALENV_DIR]/bin/activate
6. Ở đây, # where our installed python packages will live
VIRTUALENV_DIR := .venv
VIRTUALENV_EXE := virtualenv -p python2.7 # use pyvenv for python3 install
ACTIVATE := $[VIRTUALENV_DIR]/bin/activate
7 là đường dẫn đến trình thông dịch Python mong muốn, vì vậy một cái gì đó như # where our installed python packages will live
VIRTUALENV_DIR := .venv
VIRTUALENV_EXE := virtualenv -p python2.7 # use pyvenv for python3 install
ACTIVATE := $[VIRTUALENV_DIR]/bin/activate
8 sẽ sử dụng pip
thực thi cho ImportError: No module named
0. Tuy nhiên, điều này vẫn có những hạn chế của nó.Ngoài ra còn có những cách khác để đi xung quanh vấn đề này. Bạn có thể sửa đổi đường dẫn Shell Shell của mình để nó sử dụng chính xác pip
có thể thực thi hoặc thay đổi
ImportError: No module named
2 để phiên bản Python mong muốn của bạn có thể tìm thấy các gói nằm trong một thư mục khác. Nhưng tất cả những điều này có thể trở nên lộn xộn nhanh chóng.Thay vào đó, môi trường ảo thường được sử dụng để cô lập các cài đặt Python với nhau. Một môi trường ảo chứa, trong số những thứ khác, một trình thông dịch Python, thực thi pip
và thư mục gói trang web, là vị trí tiêu chuẩn cho hầu hết các gói được tải xuống với pip
.virtual environments are often used to isolate Python installations from one another. A virtual environment contains, among other things, a Python interpreter, a pip
executable, and a site-packages directory, which is the standard location for most packages downloaded with pip
.
Bằng cách kích hoạt môi trường ảo trong vỏ của bạn, bạn chỉ đưa nó đến các tệp thực thi pip
và Python được cài đặt trong môi trường ảo của bạn, đảm bảo rằng các phiên bản phù hợp của cả hai ứng dụng được gọi và các gói luôn được cài đặt vào đúng vị trí. Môi trường ảo cũng cho phép bạn chạy các phiên bản khác nhau của cùng một gói với các dự án khác nhau, điều gì đó không thể nếu bạn đang sử dụng cài đặt Python toàn cầu.
Có nhiều môi trường ảo khác nhau để lựa chọn. Khóa học này sử dụng Conda, đi kèm với Anaconda. Bạn có thể tìm hiểu thêm về môi trường ảo khi làm việc với môi trường ảo Python.Conda, bundled with Anaconda. You can learn more about virtual environments in Working With Python Virtual Environments.