RESOLVED: python, PYTHONPATH, sys.path
Модератор: Модераторы разделов
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
RESOLVED: python, PYTHONPATH, sys.path
Помогите разобраться с путями в питоне.
На моей машине всё работает, а на хостинге не хочет, потому что у меня MySQLdb установлен прямо в /usr/lib/python..... а на хостинге нет... саппорт сказал что дескать установите себе локально, что я и проделал.
Но вот незадача, если я не посетаю PYTHONPATH в ту локальную папку куда я установил, гнусный питон ни за что этот модуль не видит как бы я не изворачивался. Как заставить его видеть модуль? может есть способ подсунуть модуль как-то прямо в папку со скриптами чтобы они были будто частью приложения? на PYTHONPATH я повлиять не могу. Скрипты выполняются как CGI.
На моей машине всё работает, а на хостинге не хочет, потому что у меня MySQLdb установлен прямо в /usr/lib/python..... а на хостинге нет... саппорт сказал что дескать установите себе локально, что я и проделал.
Но вот незадача, если я не посетаю PYTHONPATH в ту локальную папку куда я установил, гнусный питон ни за что этот модуль не видит как бы я не изворачивался. Как заставить его видеть модуль? может есть способ подсунуть модуль как-то прямо в папку со скриптами чтобы они были будто частью приложения? на PYTHONPATH я повлиять не могу. Скрипты выполняются как CGI.
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: RESOLVED: python, PYTHONPATH, sys.path
Добавляйте путь в sys.path прямо в самом начале скрипта, до import'ов.
Это уже зависит от вашего хостера. А технически, можно, конечно.
Мои розовые очки
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: RESOLVED: python, PYTHONPATH, sys.path
watashiwa_daredeska писал(а): ↑12.03.2009 12:22Добавляйте путь в sys.path прямо в самом начале скрипта, до import'ов.
Это уже зависит от вашего хостера. А технически, можно, конечно.
Не работает sys.path.append.. всё перепробовал, не видит и всё тут, хоть тресни.
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: RESOLVED: python, PYTHONPATH, sys.path
ещё есть одна особенность: у меня на машине в папке site-packages есть папка MySQLdb а в ней скрипты, а target машине хостера установился egg файл, что-то вроде MySQL_python-1.2.2....egg
вероятно и не работает потому что он не может в рантайме подцепить этот egg-файл
вероятно и не работает потому что он не может в рантайме подцепить этот egg-файл
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: RESOLVED: python, PYTHONPATH, sys.path
Не то добавляете, не так добавляете и т.п. Как добавляете в sys.path (код)? Что есть по тому пути, который добавляете?
egg-файл сам по себе не цепляется, насколько я помню. Цепляется pth-файл (у меня easy-install.pth, созданный автоматом при установке easy-install-пакета) из этого каталога, в котором написано что-то вроде:
Код: Выделить всё
import sys; sys.__plen = len(sys.path)
./html5lib-0.10-py2.5.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)После этого, sys.path выглядит как-то так:
Код: Выделить всё
['', '/home/user/opt/lib/python2.5/site-packages/html5lib-0.10-py2.5.egg', '/home/user/opt/lib/python', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric', '/var/lib/python-support/python2.5', '/var/lib/python-support/python2.5/gtk-2.0', '/home/user/opt/lib/python2.5/site-packages']Мои розовые очки
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: RESOLVED: python, PYTHONPATH, sys.path
watashiwa_daredeska писал(а): ↑12.03.2009 13:08Не то добавляете, не так добавляете и т.п. Как добавляете в sys.path (код)? Что есть по тому пути, который добавляете?
egg-файл сам по себе не цепляется, насколько я помню. Цепляется pth-файл (у меня easy-install.pth, созданный автоматом при установке easy-install-пакета) из этого каталога, в котором написано что-то вроде:
Код: Выделить всё
import sys; sys.__plen = len(sys.path) ./html5lib-0.10-py2.5.egg import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
После этого, sys.path выглядит как-то так:
Думаю, можно и самому вкрутить путь до egg-файла в sys.path, должно работать.Код: Выделить всё
['', '/home/user/opt/lib/python2.5/site-packages/html5lib-0.10-py2.5.egg', '/home/user/opt/lib/python', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric', '/var/lib/python-support/python2.5', '/var/lib/python-support/python2.5/gtk-2.0', '/home/user/opt/lib/python2.5/site-packages']
Вот первой строкой вывода index.py печатается содержимое sys.path, а дальше стектрейс, далее проверка наличия всего необходимого в тех местах, которые в sys.path имеются. Я надобавлял кучу вариантов пустей, но ни один не работает.
Код: Выделить всё
[fealot86@cp15 ~]$ www/cgi-bin/index.py
['/home/fealot86/public_html/cgi-bin', '/usr/local/lib/python24.zip', '/usr/local/lib/python2.4', '/usr/local/lib/python2.4/plat-freebsd6', '/usr/local/lib/python2.4/lib-tk', '/usr/local/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages', '/home/fealot86/pypkgs', '/home/fealot86/pypkgs/lib', '/home/fealot86/pypkgs/lib/python2.4', '/home/fealot86/pypkgs/lib/python2.4/site-packages']
Traceback (most recent call last):
File "www/cgi-bin/index.py", line 13, in ?
from element_render import element_render
File "/home/fealot86/public_html/cgi-bin/element_render.py", line 1, in ?
from image_show_renderer import image_show_renderer
File "/home/fealot86/public_html/cgi-bin/image_show_renderer.py", line 4, in ?
from adm import isAdmin
File "/home/fealot86/public_html/cgi-bin/adm.py", line 5, in ?
from dao.user import check_session
File "/usr/local/lib/python2.4/user.py", line 7, in ?
However, some programs or sites may find it convenient to allow users
File "/home/fealot86/public_html/cgi-bin/dao/connect.py", line 5, in ?
import MySQLdb
ImportError: No module named MySQLdb
[fealot86@cp15 ~]$
[fealot86@cp15 ~/pypkgs/lib/python2.4/site-packages]$ pwd
/home/fealot86/pypkgs/lib/python2.4/site-packages
[fealot86@cp15 ~/pypkgs/lib/python2.4/site-packages]$ ls
MySQL_python-1.2.2-py2.4-freebsd-6.3-RELEASE-p5-i386.egg
easy-install.pth
setuptools-0.6c5-py2.4.egg
setuptools.pth
site.py
site.pyc
site.pyo
[fealot86@cp15 ~/pypkgs/lib/python2.4/site-packages]$
[cy6ergn0m@cgmachine dist]$I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: RESOLVED: python, PYTHONPATH, sys.path
Код: Выделить всё
cat /home/fealot86/pypkgs/lib/python2.4/site-packages/*.pthМои розовые очки
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: RESOLVED: python, PYTHONPATH, sys.path
watashiwa_daredeska писал(а): ↑12.03.2009 13:20покажитеКод: Выделить всё
cat /home/fealot86/pypkgs/lib/python2.4/site-packages/*.pth
Код: Выделить всё
[fealot86@cp15 ~]$ cat /home/fealot86/pypkgs/lib/python2.4/site-packages/*.pth
import sys; sys.__plen = len(sys.path)
./setuptools-0.6c5-py2.4.egg
./MySQL_python-1.2.2-py2.4-freebsd-6.3-RELEASE-p5-i386.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
./setuptools-0.6c5-py2.4.egg
[fealot86@cp15 ~]$я думаю что питон этот pth не выполняет нифига, потому что он не входит в PYTHONPATH.. а видимо sys.path.append ему даже не намёк на это.
зато если прописать PYTHONPATH, то работает и без sys.path.append, но проблема в том что я не имею контроля над окружением из которого дёргаются эти скрипты.
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: RESOLVED: python, PYTHONPATH, sys.path
Попробуйте вместо простого sys.path.append сделать так.
Вариант 1:
Вариант 2:
sys.path.append('/home/fealot86/pypkgs/lib/python2.4/site-packages/MySQL_python-1.2.2-py2.4-freebsd-6.3-RELEASE-p5-i386.egg')
UPD: Сорри, expanduser может не работать в cgi. Разверните руками в полный путь.
Вариант 1:
Код: Выделить всё
import os.path, site, sys
site.addsitedir( os.path.expanduser( "~/pypkgs/lib/python%s/site-packages" % (sys.version[:3],) ) )Вариант 2:
sys.path.append('/home/fealot86/pypkgs/lib/python2.4/site-packages/MySQL_python-1.2.2-py2.4-freebsd-6.3-RELEASE-p5-i386.egg')
UPD: Сорри, expanduser может не работать в cgi. Разверните руками в полный путь.
Мои розовые очки
Спасибо сказали:
-
cy6erGn0m
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: RESOLVED: python, PYTHONPATH, sys.path
О! Ура! Сработало, только я на всякий случай заменил ~ на прямой путь во избежание недоразумений, потому как апач вроде CGI выполняет от имени другого пользователя (правда я не на 100% уверен, не проверял ещё)
Спасибо большое!
Спасибо большое!
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/