Python: ручная установка модулей на примере Psutil

Автор: | 06/05/2014
 

PythonПоиск модуля в Python

Проверяем установлен ли модуль.

Для этого воспользуемся встроенным модулем  imp и его функцией find_module:

$ pydoc imp.find_module
..
imp.find_module = find_module(...)
find_module(name, [path]) -> (file, filename, (suffix, mode, type))
Search for a module.  If path is omitted or None, search for a
built-in, frozen or special module and continue search in sys.path.
The module name cannot contain '.'; to search for a submodule of a
package, pass the submodule name and the package's __path__.

Создадим файл psutiltest.py с таким содержимым:

#!/usr/bin/env python

import imp

mod = 'psutil'

try:
  imp.find_module(mod)
  print 'nModule %s found.n' % (mod)
except ImportError:
        print 'nERROR: can't find module %s!n' % (mod)

Запускаем:

$ ./psutiltest.py

ERROR: can't find module psutil!

Хорошо, модуль не найден.

Для начала – проверим какие пути к библиотекам у нас используются. Для этого – используем модуль sys и его функцию path.

Добавляем в файл:

import sys
print sys.path[1:]

Убираем из вывода элемент списка с индексом 0, т.к. в документации говорится, что:

As initialized upon program startup, the first item of this list, path[0], is the directory containing the script that was used to invoke the Python interpreter.

Запускаем скрипт – и получаем список директорий, в которых интерпретатор будет искать библиотеки модулей:

$ ./psutiltest.py

ERROR: can't find module pynetstat!

['/usr/local/lib/python2.7/site-packages/Sphinx-1.2.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Babel-1.3-py2.7.egg', '/usr/home/setevoy/scripts/python', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-freebsd9', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']

Установка модуля Python с помощью опции –preifx

Создаём свою директорию, в которую будем устанавливать новый модуль:

$ mkdir /home/setevoy/scripts/python/mylibs

Если нет переменной PYTHONPATH – то создаём её в неё добавляем наш новый каталог:

$ cat ~/.bashrc | grep PYTHONPATH
export PYTHONPATH="/home/setevoy/scripts/python/mylibs/lib/python2.7/site-packages/"

Перечитаем его:

$ . ~/.bashrc

Теперь – можно приступать к установке модуля.

Переходим в любой каталог, и загружаем архив:

$ cd ~/tmp/
$ wget --no-check-certificate https://pypi.python.org/packages/source/p/psutil/psutil-2.1.1.tar.gz
--2014-05-05 18:41:30--  https://pypi.python.org/packages/source/p/psutil/psutil-2.1.1.tar.gz
Resolving pypi.python.org (pypi.python.org)... 185.31.16.175
...
Saving to: 'psutil-2.1.1.tar.gz'

100%[============================================================================================================================================1.00MB/s   in 0.2s

2014-05-05 18:41:31 (1.00 MB/s) - 'psutil-2.1.1.tar.gz' saved [216796/216796]

Распаковываем:

$ tar xfp psutil-2.1.1.tar.gz
$ ls -l
total 216
drwxrwxr-x  7 setevoy  setevoy     512 Apr 30 17:26 psutil-2.1.1
-rw-r--r--  1 setevoy  setevoy  216796 Apr 30 17:27 psutil-2.1.1.tar.gz
$ cd psutil-2.1.1
$ ls -l
total 124
-rw-rw-r--  1 setevoy  setevoy   3793 Apr 29 22:17 CREDITS
-rw-rw-r--  1 setevoy  setevoy  32402 Apr 30 17:26 HISTORY
-rw-r--r--  1 setevoy  setevoy   1584 Apr 17 10:49 LICENSE
-rw-r--r--  1 setevoy  setevoy    308 Apr  8 03:03 MANIFEST.in
-rw-r--r--  1 setevoy  setevoy   1944 Apr 16 14:37 Makefile
-rw-rw-r--  1 setevoy  setevoy  14092 Apr 30 17:26 PKG-INFO
-rw-r--r--  1 setevoy  setevoy   9445 Apr 17 10:32 README
-rw-r--r--  1 setevoy  setevoy   4843 Apr 21 20:19 TODO
drwxrwxr-x  5 setevoy  setevoy    512 Apr 30 17:26 docs
drwxrwxr-x  2 setevoy  setevoy    512 Apr 30 17:26 examples
-rw-r--r--  1 setevoy  setevoy   5797 Apr  8 03:03 make.bat
drwxrwxr-x  3 setevoy  setevoy   1024 Apr 30 17:26 psutil
drwxrwxr-x  2 setevoy  setevoy    512 Apr 30 17:26 psutil.egg-info
-rw-rw-r--  1 setevoy  setevoy     59 Apr 30 17:26 setup.cfg
-rw-r--r--  1 setevoy  setevoy   6541 Apr  9 01:17 setup.py
drwxrwxr-x  2 setevoy  setevoy    512 Apr 30 17:26 test

И запускаем установку, с помощью --prefix указав директорию, в которую будем устанавливать:

$ python setup.py install --prefix=/home/setevoy/scripts/python/mylibs

Редактируем наш файл – добавляем вызов psutil:

#!/usr/bin/env python

import psutil
print psutil.cpu_times()

Запускаем:

$ ./psutiltest.py
scputimes(user=269034.5234375, nice=240.390625, system=100019.34375, idle=7668215.40625, irq=38178.0625)

Установка модуля Python с помощью опции –user

По умолчанию для пользователя пусть для установки модулей задан как директория .local в его домашней директории.

Проверить это можно с помощью модуля site и функций getuserbase() и getusersitepackages().

Изменим наш скрипт, добавим в него вызовы этих функций:

#!/usr/bin/env python

import site

print site.getuserbase()
print site.getusersitepackages()

Запускаем:

$ ./psutiltest.py
/home/setevoy/.local
/home/setevoy/.local/lib/python2.7/site-packages

Теперь можно запускать установку с помощью опции --user:

$ python setup.py install --user
...
Installed /usr/home/setevoy/.local/lib/python2.7/site-packages/psutil-2.1.1-py2.7-freebsd-9.0-RELEASE-p3-i386.egg
Processing dependencies for psutil==2.1.1
Finished processing dependencies for psutil==2.1.1

Готово.

Возможностей в Psutil много, смотрите документацию тут>>>.

И не забываем про возможно установки с помощью утилит типа pipPython: утилита pip для установки пакетов из PyPI.

Ссылки по теме

https://docs.python.org
https://docs.python.org