Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Kouzelný dědeček 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
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
-
http://docs.python-guide.org/en/latest/dev/virtualenvs/
-
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ů.
-
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.
-
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.
-
a co sem dát chybu co ti to hlásí?...
-
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.
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.
-
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ě.
-
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.
-
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`
-
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.
-
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
-
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.
-
--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?
-
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
-
--prefix ti to "hodi uplne do haje", tak staci si to z toho haje nasymlinkovat tam, kam potrebujes. Pokud teda jde o platformu, kde se da se symlinky rozumne pracovat.
-
--prefix ti to "hodi uplne do haje", tak staci si to z toho haje nasymlinkovat tam, kam potrebujes. Pokud teda jde o platformu, kde se da se symlinky rozumne pracovat.
Aha! Už chápu. Ale na co symlink, když to mužu pomocí --install-purelib nainstalovat do mnou určenýho adresáře? Cílová platforma je derivát Fedory, takže by symlink neměl bejt problém, akorát mi uniká, včem je lepší --prefix+symlink než --install-purelib.
-
Aha! Už chápu. Ale na co symlink, když to mužu pomocí --install-purelib nainstalovat do mnou určenýho adresáře? Cílová platforma je derivát Fedory, takže by symlink neměl bejt problém, akorát mi uniká, včem je lepší --prefix+symlink než --install-purelib.
Pokud dobře chápu dokumentaci https://docs.python.org/2/install/ tak --install-purelib říká, kam se mají instalovat čistě pythonní soubory. Pokud ta knihovna bude mít ještě jiné soubory, tak se ti zřejmě nainstalují kdovíkam (asi někam do /usr/local/lib/python/site-packages). Takže pravděpodobně budeš mít pocit, že něco instaluješ někam do podadresáře a pak to můžeš přenést, ale ono to na cíli nemusí fungovat, protože část toho je v /usr/local, který přenášet nebudeš.