[python]PYTHONPATH
От: Alexey931  
Дата: 21.01.12 15:13
Оценка:
Доброго времени суток всем!

Что собой представляет PYTHONPATH — как бы это сказать, — "физически"? Среди переменных окружения (Linux) такой нет. sys.path, натурально, чего-то показывает:

Python 3.2.2 (default, Nov 21 2011, 16:51:01)
[GCC 4.6.2] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> import sys
>>> sys.path
['/home/alexey', '/usr/bin', '/usr/lib/python32.zip', '/usr/lib/python3.2', '/usr/lib/python3.2/plat-linux2', '/usr/lib/python3.2/lib-dynload', '/usr/lib/python3.2/site-packages', '/usr/lib/python3.2/site-packages/setuptools-0.6c11.egg-info']
>>>

У меня, однако, питонов два: 2.7 и 3.2, живут мирно, не конфликтуют. Натурально, PYTHONPATH у каждого своя, и понятно, почему я ее не вижу среди системных переменных окружения.

Eclipse позволяет добавить к PYTHONPATH что угодно в [локальном] масштабе проекта. Само по себе неплохо, конечно.

Гуглил довольно много, но "как это сделано" не понял.
Re: [python]PYTHONPATH
От: Daevaorn Россия  
Дата: 21.01.12 16:14
Оценка:
Здравствуйте, Alexey931, Вы писали:

A>Доброго времени суток всем!


A>Гуглил довольно много, но "как это сделано" не понял.


Как сделано что? Переменные окружения? PYTHONPATH нет по-дефолту, что логично. Туда можно добавить к имеющимся любые дополнительные пути поиска модулей. Эта переменная никак не привязана к версии интерпретатора.
Re: [python]PYTHONPATH
От: neFormal Россия  
Дата: 21.01.12 19:31
Оценка:
Здравствуйте, Alexey931, Вы писали:

A>Что собой представляет PYTHONPATH — как бы это сказать, — "физически"? Среди переменных окружения (Linux) такой нет. sys.path, натурально, чего-то показывает:

A>У меня, однако, питонов два: 2.7 и 3.2, живут мирно, не конфликтуют. Натурально, PYTHONPATH у каждого своя, и понятно, почему я ее не вижу среди системных переменных окружения.

PYTHONPATH ищется среди переменных окружения на старте, и, если переменная объявлена, то содержимое добавляется к sys.path
вызови следующую команду в шелле и проанализируй после этого sys.path
PYTHONPATH='rsdn.dynamics' python
...coding for chaos...
Re: [python]PYTHONPATH
От: kmmbvnr Россия http://kmmbvnr.livejournal.com
Дата: 22.01.12 04:56
Оценка:
Здравствуйте, Alexey931, Вы писали:

A>Доброго времени суток всем!


A>Что собой представляет PYTHONPATH — как бы это сказать, — "физически"? Среди переменных окружения (Linux) такой нет. sys.path, натурально, чего-то показывает:


A>Гуглил довольно много, но "как это сделано" не понял.


Про pythonpath выше уже ответили, а если интересно как вообще python ищет модули, можно посмотреть PyCon 2011: Reverse-engineering Ian Bicking's brain: inside pip and virtualenv
-- Главное про деструктор копирования не забыть --
Re[2]: [python]PYTHONPATH
От: Alexey931  
Дата: 22.01.12 10:00
Оценка:
Здравствуйте, neFormal, Вы писали:

F>
F>PYTHONPATH='rsdn.dynamics' python
F>


$ PYTHONPATH='rdsn.dynamics' python
Python 3.2.2 (default, Nov 21 2011, 16:51:01)
[GCC 4.6.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/alexey/rdsn.dynamics', '/usr/lib/python32.zip', '/usr/lib/python3.2', '/usr/lib/python3.2/plat-linux2', '/usr/lib/python3.2/lib-dynload', '/usr/lib/python3.2/site-packages', '/usr/lib/python3.2/site-packages/setuptools-0.6c11.egg-info']
>>>

Ну да, смотрится красиво. Но что произошло под капотом? Об этом-то вся тема... Дефицит понимания приводит, например, к следующему:

(1) Хочу воспользоваться PyQt, не выходит. Ладно, смотрю где оно:

$ ls /usr/lib/python3.2/site-packages/PyQt4
__init__.py QtDBus.so QtMultimedia.so Qt.so QtXmlPatterns.so
phonon.so QtDeclarative.so QtNetwork.so QtSql.so QtXml.so
pyqtconfig.py QtDesigner.so QtOpenGL.so QtSvg.so uic
Qsci.so QtGui.so QtScript.so QtTest.so
QtCore.so QtHelp.so QtScriptTools.so QtWebKit.so
[alexey@stovepipebox ~]$

Что получается в IDLE:


Python 3.2.2 (default, Nov 21 2011, 16:51:01)
[GCC 4.6.2] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> import sys
>>> sys.path
['/home/alexey', '/usr/bin', '/usr/lib/python32.zip', '/usr/lib/python3.2', '/usr/lib/python3.2/plat-linux2', '/usr/lib/python3.2/lib-dynload', '/usr/lib/python3.2/site-packages', '/usr/lib/python3.2/site-packages/setuptools-0.6c11.egg-info']
>>> from PyQt4.QtCore import *
>>> a = QString("an")
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
a = QString("an")
NameError: name 'QString' is not defined
>>> sys.path.append('/usr/lib/python3.2/site-packages/PyQt4')
>>> sys.path
['/home/alexey', '/usr/bin', '/usr/lib/python32.zip', '/usr/lib/python3.2', '/usr/lib/python3.2/plat-linux2', '/usr/lib/python3.2/lib-dynload', '/usr/lib/python3.2/site-packages', '/usr/lib/python3.2/site-packages/setuptools-0.6c11.egg-info', '/usr/lib/python3.2/site-packages/PyQt4']
>>> from PyQt4.QtCore import *
>>> a = QString("an")
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a = QString("an")
NameError: name 'QString' is not defined
>>> from QtCore import *
>>> a = QString("an")
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
a = QString("an")
NameError: name 'QString' is not defined
>>> dir(PyQt4)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
dir(PyQt4)
NameError: name 'PyQt4' is not defined
>>> dir(QtCore)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
dir(QtCore)
NameError: name 'QtCore' is not defined
>>>

Иными словами, окружение я так и не настроил. О чем, собственно, и беспокоюсь.
Re[3]: [python]PYTHONPATH
От: neFormal Россия  
Дата: 22.01.12 11:20
Оценка:
Здравствуйте, Alexey931, Вы писали:

A>Но что произошло под капотом?


я ж объяснил..

A>(1) Хочу воспользоваться PyQt, не выходит. Ладно, смотрю где оно:

>>>> from PyQt4.QtCore import *
>>>> a = QString("an")
A>Traceback (most recent call last):
A>  File "<pyshell#3>", line 1, in <module>
A>    a = QString("an")
A>NameError: name 'QString' is not defined


вот здесь ^ у тебя должно было появиться предчувствие, что QString-а там нет.. и PYTHONPATH тут ни при чём..

>>>> from PyQt4.QtCore import *
>>>> a = QString("an")
A>Traceback (most recent call last):
A>  File "<pyshell#6>", line 1, in <module>
A>    a = QString("an")
A>NameError: name 'QString' is not defined


а что, если джважды написать одно и то же, то что-то изменится?. у тебя ж PyQt4 доступен, значит с путями всё нормально..

>>>> dir(PyQt4)
A>Traceback (most recent call last):
A>  File "<pyshell#9>", line 1, in <module>
A>    dir(PyQt4)
A>NameError: name 'PyQt4' is not defined


ищобы.. где ты делал 'import PyQt4' ? нигде, потому и not defined.. аналогично с QtCore..
сделай 'import PyQt4' и смотри потом dir(PyQt4)..

A>Иными словами, окружение я так и не настроил. О чем, собственно, и беспокоюсь.


дело не в окружении, а в версии питона и апишке PyQt4.. цитата:

PyQt provides two different APIs [riverbankcomputing.co.uk], the first of which provides QStrings, QVariants, etc as is in Python. The new API 2 provides automatic conversion between the Qt classes and respective native Python datatypes and is much more Pythonic in nature. PyQt on Python 2.x defaults to API 1, while PyQt on Python 3 defaults to API 2.

http://developer.qt.nokia.com/wiki/Differences_Between_PySide_and_PyQt
т.е. в PyQt4 API2, которая используется для 3го питона, нет больше QString-а и других базовых типов.. там производится конвертация из типов питона в типы Qt..
да, и когда допишут поддержку py3k для PySide, переходи на них, они лудтше
...coding for chaos...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.