Friday, October 7, 2011

războiul de 100 de ani cu pyhton

ieri eu și andrei ne laudam unul la altul în drum spre casa ca aproape am rezolvat o problema. da ne laudam asa de tare ca nici unul nu era atent la celalat și vroia el sa vorbeasca mai tare și mai mult. am ramas nesatisfăcută de lauda catre andrei și ma laud acum aici.

n-a durat asa de mult razboiul. problema: importam neste EPF feeduri de la apple cu unealta lor. script python. nu exista suport mai deloc pe internets pentru EPF import și suntem numai trei în firma care mai mișcă în python. da slab. ăștia de la apple zic ca scriptul merge pe python 2.6 și mai sus. mie imi mergea de la linia de comanda și din cron pe dev. dar pe live nu mergea. testam din linia de comanda. una ca era feedul de importat corupt. am încercat și cu altul. am înaintat pana la piciorul broaștei. avem mai multe versiuni de python instalate. ma gândeam oare sa instalez exact 2.6.5 ca asta mergea la mine pe dev? da unu ca nu vreu eu sa instalez chestii pe live și doi m-am gandit ca sigur tre sa fie niste env vars și degeaba instalez eu în padurea de pythonuri deja existente unul anume ca tot n-am sa știu sa-l găsesc mai tarziu. daca tre sa meargă peste 2.6, atunci tre sa meargă! n-a mers din linia de comanda pana n-am specificat versiunea.
python2.6 EPFImporter.py /path/to/unpacked/feed
apoi m-am relaxat eu și am pus cronul și-am plecat acasă. normal. a doua zi, cronul eșuat ca nu găsește MySQLdb. Cum naiba?! ca daca-i dau drumul găsește...
-bash$ python2.6
[..]
>>> import MySQLdb
>>>
nu mergea din cron. am googled si am gasit pe stackoverlow. bazat site-ul ala. env vars era. ca sa vaz diferența am listat env vars din cron pe live și din linia de comanda pe live. am pus asta în script:
import os
import sys
for param in os.environ.keys():
    print "%20s %s" % (param,os.environ[param])
sys.exit()
a mers în sfârșit când am specificat calea absoluta la versiunea care trebuie. ca era o /usr/bin/python2.6 și o /usr/local/bin/python2.6 și command line folosea prima si cron folosea a doua. pff. ce-am găsit util:
whereis python
python: /usr/bin/python2.6 /usr/bin/python2.4 /usr/bin/python /usr/lib/python2.6 /usr/lib/python2.4 /usr/local/bin/python2.7 /usr/local/bin/python3.2m-config /usr/local/bin/python3.2 /usr/local/bin/python2.6 /usr/local/bin/python2.7-config /usr/local/bin/python3.2m /usr/local/bin/python2.6-config /usr/local/bin/python3.2-config /usr/local/bin/python /usr/local/lib/python2.7 /usr/local/lib/python3.2 /usr/local/lib/python2.6 /usr/include/python2.6 /usr/include/python2.4 /usr/share/man/man1/python.1.gz
apoi din alea cu bin si python 2.6 trebuie ales ala care merge cu libraria de MySQLdb. pornit pythonul și executat importul:
-bash$ /usr/bin/python2.6
[..]
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named MySQLdb
>>>

-bash$ /usr/local/bin/python2.6
[..]
>>> import MySQLdb
>>>
și apoi scriptul trebuie executat cu pythonul care merge:
/usr/local/bin/python2.6 EPFImporter.py /path/to/unpacked/feed
iha!

No comments:

Post a Comment