Instalace python závislostí do adresáře projektu

Instalace python závislostí do adresáře projektu
« kdy: 16. 09. 2015, 19:32:16 »
Ahoj,
snažím se udělat si aplikaci pro SailfishOS pomocí QML a Pyotherside. V pythonu mám modely a ty chci aby pracovaly s sqlite databází. Pythoní cosi v modulu sqlite3 mi uplně nevyhovuje a chtěl bych použít SQLAlchemy. SailfishOS nemá v repu balíček s timdle modulem, proto ho nemůžu přidat do závislostí a musim si táhnout závislosti v projektu - a to je muj kámen úrazu.

Pomocí pipu jsem nainstaloval modul do [adresáře projektu]/lib
Kód: [Vybrat]
pip install --install-option="--install-purelib=`pwd`/lib" sqlalchemy
ale moje app z nepochopitelných důvodů padá i na obyčejném selectu; když importnu modul z... no... ze systemu, když ho mam v /usr/local/lib/python.. tak mi to funguje bez problému, z toho usuzuji, že chyba je někde v instalaci modulu do mého projektu.

Dokázal by mi někdo, prosím, poradit, jak nainstalovat (ať už pipem, nebo nějak jinak) do adresáře projektu potřebné moduly tak, aby fungovaly?
Díky



Re:Instalace python závislostí do adresáře projektu
« Odpověď #2 kdy: 16. 09. 2015, 20:25:29 »
http://docs.python-guide.org/en/latest/dev/virtualenvs/

Virtualenv znám, sic ho nepoužívám. Nejsem si jist, zda je možný použít s pyotherside, popř jak. Pochopil jsem, že to je určený pro pythoní projekty. Muj projekt je spíš.. asi QML, ve kterym volám funkce z pythoních modulů.

Re:Instalace python závislostí do adresáře projektu
« Odpověď #3 kdy: 16. 09. 2015, 20:31:28 »
Tím chci říct, že jsem hledal možnost použití virtualenvu pro vyřešení mého problému v mem projektu, bohužel se mi nepodařilo vyčíst, že by to šlo.

Re:Instalace python závislostí do adresáře projektu
« Odpověď #4 kdy: 16. 09. 2015, 20:37:27 »
Pochopil jsem dotaz tak, že chceš nějaké pythonní knihovny instalovat do nějakého adresáře. To by pomocí virtualenvu mělo jít bezbolestně. Určitě to jde i bez něj, ale bude to složitější a sám říkáš, že ti to nešlo rozchodit. Pochybuju, že na to bude nějaký silver bullet.


Snow

Re:Instalace python závislostí do adresáře projektu
« Odpověď #5 kdy: 16. 09. 2015, 20:49:44 »
a co sem dát chybu co ti to hlásí?...

Re:Instalace python závislostí do adresáře projektu
« Odpověď #6 kdy: 16. 09. 2015, 21:21:23 »
a co sem dát chybu co ti to hlásí?...

Omlouvám se, myslel jsem, že chyba je nepodstatná, vzhledem k tomu, že pokud normálně importnu modul ze systemu, tak to funguje, ale pokud importnu modul nainstalovanej do lib, tak ne; oba dva moduly jsou ve stejné verzi.

Kód: [Vybrat]
Traceback (most recent call last):
  File "", line 1, in
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/models.py", line 58, in getValue
    s = select([self.table.c.value]).where(self.table.c.key==key)
  File "", line 2, in where
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/base.py", line 45, in _generative
    fn(self, *args[1:], **kw)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/selectable.py", line 2897, in where
    self.append_whereclause(whereclause)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/selectable.py", line 3122, in append_whereclause
    True_._ifnone(self.whereclause), whereclause)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/elements.py", line 1929, in and
    return cls.construct(operators.and, True_, False_, *clauses)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/elements.py", line 1863, in _construct
    util.coerce_generator_arg(clauses)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/elements.py", line 1862, in
    for clause in
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/elements.py", line 3766, in _expression_literal_as_text
    return _literal_as_text(element, warn=True)
  File "/home/tobik/Buhvico/Programovani/beardware/hgclient/qml/hgo/lib/sqlalchemy/sql/elements.py", line 3787, in _literal_as_text
    "instead" % type(element)
hgo.lib.sqlalchemy.exc.ArgumentError: SQL expression object or string expected, got object of type  instead

Pochopil jsem dotaz tak, že chceš nějaké pythonní knihovny instalovat do nějakého adresáře. To by pomocí virtualenvu mělo jít bezbolestně. Určitě to jde i bez něj, ale bude to složitější a sám říkáš, že ti to nešlo rozchodit. Pochybuju, že na to bude nějaký silver bullet.

Virtualenv, pokud to chápu dobře, funguje tak, že vlezu do složky problému, aktivuju ho a dokud ho nedeaktivuju, budou se brát moduly z něj. Uplně si nejsem jist, jak to použít pro řešení mého projektu. Musel bych donutit nějak aby se výsledná app spouštěla v aktivovanym virtualenvironmentu, že? Imho s tim asi uplně vývojové prostředí nepočítá. Alespoň teda mě nenapadá, jak bych to udělal.

Re:Instalace python závislostí do adresáře projektu
« Odpověď #7 kdy: 17. 09. 2015, 06:22:42 »
Virtualenv, pokud to chápu dobře, funguje tak, že vlezu do složky problému, aktivuju ho a dokud ho nedeaktivuju, budou se brát moduly z něj. Uplně si nejsem jist, jak to použít pro řešení mého projektu. Musel bych donutit nějak aby se výsledná app spouštěla v aktivovanym virtualenvironmentu, že? Imho s tim asi uplně vývojové prostředí nepočítá. Alespoň teda mě nenapadá, jak bych to udělal.
To "aktivuju" a "deaktivuju" jenom znamená, že se nastaví nějaké cesty a ENV proměnné. Pro tebe je důležitý, že máš všechny potřebné knihovny v nějakém adresáři a máš je korektně přeložené proti sobě.

uetoyo

Re:Instalace python závislostí do adresáře projektu
« Odpověď #8 kdy: 17. 09. 2015, 11:10:21 »
Budeš mít chybu v programu samotném. SQLAlchemy se ti, jak se zdá, normálně načte jako modul. Pokud bys měl problém s verzí knihovny, je virtualenv to co potřebuješ a také co bys měl vždy používat pro každý jednotlivý projekt.

uetoyo

Re:Instalace python závislostí do adresáře projektu
« Odpověď #9 kdy: 17. 09. 2015, 11:19:15 »
Krátce, jak na virtualenv:

Zkopíruje prostředí pythonu do lokálního adresáře (_env) programu:
`python -m virtualenv _env`

Aktivuješ pomocí skriptu v:
`_env\Scripts\activate`

Později můžeš deaktivovat prostředí pomocí příkazu `deactivate`.

Nainstaluješ SLQALchemy lokálně do adresáře `site-packages`:
`pip install SQLAlchemy`

Re:Instalace python závislostí do adresáře projektu
« Odpověď #10 kdy: 17. 09. 2015, 12:48:29 »
To "aktivuju" a "deaktivuju" jenom znamená, že se nastaví nějaké cesty a ENV proměnné. Pro tebe je důležitý, že máš všechny potřebné knihovny v nějakém adresáři a máš je korektně přeložené proti sobě.

Jo tak, chápu. Uvidim, jestli se mi to podaří, mám dojem, že jsem měl problém s loadováním modulů v QML když nebyly v určitém adresáři. Resp. jít by to mělo, jenom mě to zas nešlo.. :D Ale to by jinak mohlo vyřešit muj problém.

Krátce, jak na virtualenv:

Zkopíruje prostředí pythonu do lokálního adresáře (_env) programu:
`python -m virtualenv _env`

Aktivuješ pomocí skriptu v:
`_env\Scripts\activate`

Později můžeš deaktivovat prostředí pomocí příkazu `deactivate`.

Nainstaluješ SLQALchemy lokálně do adresáře `site-packages`:
`pip install SQLAlchemy`

Ok, dik. :D Todle bych teda ještě asi zvládl, ale tak aspoň budu mít jistotu. :D Modul mi to opravdu načetlo bez problému. Ale potom jednoduchej select s podmínkou where mi to poslalo doháje, pokud jsem importnul modul z projektu/libs... A pokud jsem importnul ze systemu, tak to fungovalo. Já nevim, co se přesně děje při instalaci modulů, co je přesně v tom scriptu setup.py, či jak se jmenuje, ale podle mě to nebude jenom wget a tar.. :D Do něj bych se taky mohl podívat, hehe.

Re:Instalace python závislostí do adresáře projektu
« Odpověď #11 kdy: 17. 09. 2015, 13:20:35 »
Modul mi to opravdu načetlo bez problému.
To nemusí samo o sobě nic znamenat, něco se může načítat až při použití apod. Python je hodně dynamický, takže se v něm dají dělat všelijaká zvěrstva, takže se to pak nemusí chovat tak, jak bys očekával...

Já nevim, co se přesně děje při instalaci modulů, co je přesně v tom scriptu setup.py, či jak se jmenuje, ale podle mě to nebude jenom wget a tar.. :D Do něj bych se taky mohl podívat, hehe.
Zrovna u "lowlevel" záležitostí, kam by SQLAlchemy asi spadalo, je dost pravděpodobný, že to není čistý python a že se teda i něco překládá vůči nějakým knihovnám, což by ti právě mohlo způsobovat různý "magický" problémy. Kolem té instalace bude dost magie, ten přepínač "--install-purelib" asi nebude stačit, chtělo by to spíš použít klasický "--prefix", který by snad měl všechno přehodit do nějakého podadresáře. Ale jestli to fakt funguje a u kterých balíků, to ví asi jenom Pán Bůh :) Pokud bys tomu chtěl dát ještě šanci, prostuduj si dobře https://docs.python.org/2/install/index.html#custom-installation

Re:Instalace python závislostí do adresáře projektu
« Odpověď #12 kdy: 24. 09. 2015, 23:56:49 »
Zrovna u "lowlevel" záležitostí, kam by SQLAlchemy asi spadalo, je dost pravděpodobný, že to není čistý python a že se teda i něco překládá vůči nějakým knihovnám, což by ti právě mohlo způsobovat různý "magický" problémy. Kolem té instalace bude dost magie, ten přepínač "--install-purelib" asi nebude stačit, chtělo by to spíš použít klasický "--prefix", který by snad měl všechno přehodit do nějakého podadresáře. Ale jestli to fakt funguje a u kterých balíků, to ví asi jenom Pán Bůh :) Pokud bys tomu chtěl dát ještě šanci, prostuduj si dobře https://docs.python.org/2/install/index.html#custom-installation

--prefix mi to hodí uplně doháje, do project/lib/usr/local/../python/.. nějak tak je ta cesta :D to mi právě vůbec nepomůže.

Kdyby náhodou někdo řešil podobný problém a našel tudle diskusi...

Nakonec jsem to vyřešil tak: do project/lib sem nainstaloval knihovny pomocí install-purelib, v lib jsem si vytvořil __init__.py a v něm přidám do pythonpath aktuální adresář, tedy ten lib. Ve scriptu, kde chci používat moduly z lib, potom importnu lib a mužu je normálně importit do projektu.

Re:Instalace python závislostí do adresáře projektu
« Odpověď #13 kdy: 25. 09. 2015, 07:04:25 »
--prefix mi to hodí uplně doháje, do project/lib/usr/local/../python/.. nějak tak je ta cesta :D to mi právě vůbec nepomůže.

Kdyby náhodou někdo řešil podobný problém a našel tudle diskusi...

Nakonec jsem to vyřešil tak: do project/lib sem nainstaloval knihovny pomocí install-purelib, v lib jsem si vytvořil __init__.py a v něm přidám do pythonpath aktuální adresář, tedy ten lib. Ve scriptu, kde chci používat moduly z lib, potom importnu lib a mužu je normálně importit do projektu.
Pokud ti šlo jenom o tohle, tak na to stačil symlink, ne?

Re:Instalace python závislostí do adresáře projektu
« Odpověď #14 kdy: 25. 09. 2015, 12:04:26 »
Pokud ti šlo jenom o tohle, tak na to stačil symlink, ne?

Eh, vůbec mě nenapadá, jak by mi mohl symlink pomoct. Mam C++/QML app kterou rozšiřuju pythonem, resp v C++ nemam nic krom mainu a nějakejch QML komponent a jinak kod app mam v pythonu. V pythonu používám různý knihovny, který ale nejsou dostupný na cílený platformě. Ty knihovny tam ale potřebuju a instalace neni možná. Moje terminologie asi neni uplně správná, ale snad sem to to je  pochopitelný :D