PDA

Visualizza la versione completa : [Python] Come gestire le dipendenze esterne


fermat
11-01-2017, 14:02
ciao!

ho fatto un piccolo programmino in python, che richiede alcune librerie esterne.
ovviamente sul mio pc funziona tutto, è lo stesso in cui sviluppo e ho anche installato la libreria esterna.
ma se provo ad usare il programma su un altro pc, ovviamente da errore.
a meno che non installi anche la libreria tramite pip.
ovviamente è improbabile poter installare la libreria su tutti i pc.
e non tutti sono in grado di farlo da soli.
in questi casi come si fa???

clasku
11-01-2017, 22:08
Usa distutils per distribuire il tuo codice Ad esempio https://www.digitalocean.com/community/tutorials/how-to-package-and-distribute-python-applications

fermat
12-01-2017, 11:41
Usa distutils per distribuire il tuo codice Ad esempio https://www.digitalocean.com/community/tutorials/how-to-package-and-distribute-python-applications

ciao!
mi sto leggendo un pò di documentazione in giro.
tipo anche questo link:https://wiki.python.org/moin/Distutils/Tutorial
o quello trovato sulla documentazione ufficiale python.
oltre al tuo.

ma sinceramente ci sono cose che non capisco granchè.
allora, tutto il codice è dentro ad un package.
a livello di root del progetto ho creato il file setup.py:


from distutils.core import setup

setup(
name='MPImageResize',
version='',
packages=['', 'resize'],
url='',
license='',
author='',
author_email='',
description=''
)

a questo punto è qua che gli devo dire di includere anche librerie esterne (in questo caso pillow)?

clasku
12-01-2017, 13:52
No, guarda la pagina che ti ho linkato. Nel file setup c'è una voce che dice


# Dependent packages (distributions)
install_requires=[
"flask",
],


Devi metterli qui, che io sappia

fermat
12-01-2017, 14:46
ok, questo il file:


from distutils.core import setup

setup(
name='MPImageResize',
version='',
packages=['resize'],
url='',
license='',
author='',
author_email='',
description='',
install_requires=['PIL']
)
dopo di che ho lanciato questo comando:


$ python setup.py sdist
/usr/lib/python3.5/distutils/dist.py:261: UserWarning: Unknown distribution option: 'install_requires'
warnings.warn(msg)
running sdist
running check
warning: check: missing required meta-data: version, url

warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too

warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)

warning: sdist: standard file not found: should have one of README, README.txt

writing manifest file 'MANIFEST'
creating MPImageResize-0.0.0
creating MPImageResize-0.0.0/resize
making hard links in MPImageResize-0.0.0...
hard linking setup.py -> MPImageResize-0.0.0
hard linking resize/__init__.py -> MPImageResize-0.0.0/resize
hard linking resize/main.py -> MPImageResize-0.0.0/resize
hard linking resize/resizeimage.py -> MPImageResize-0.0.0/resize
creating dist
Creating tar archive
removing 'MPImageResize-0.0.0' (and everything under it)

per evitare l'errore ho fatto una modifica alla prima riga:


from setuptools import setup

setup(
name='MPImageResize',
version='',
packages=['resize'],
url='',
license='',
author='Mattepuffo',
author_email='',
description='',
install_requires=['PIL']
)
e rilanciato il comando:


$ python setup.py sdist
/usr/lib/python3.5/site-packages/setuptools/dist.py:342: UserWarning: The version specified ('') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.
"details." % self.metadata.version
running sdist
running egg_info
creating MPImageResize.egg-info
writing dependency_links to MPImageResize.egg-info/dependency_links.txt
writing top-level names to MPImageResize.egg-info/top_level.txt
writing MPImageResize.egg-info/PKG-INFO
writing requirements to MPImageResize.egg-info/requires.txt
writing manifest file 'MPImageResize.egg-info/SOURCES.txt'
reading manifest file 'MPImageResize.egg-info/SOURCES.txt'
writing manifest file 'MPImageResize.egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt

running check
warning: check: missing required meta-data: url

warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too

creating MPImageResize-0.0.0
creating MPImageResize-0.0.0/MPImageResize.egg-info
creating MPImageResize-0.0.0/resize
copying files to MPImageResize-0.0.0...
copying setup.py -> MPImageResize-0.0.0
copying MPImageResize.egg-info/PKG-INFO -> MPImageResize-0.0.0/MPImageResize.egg-info
copying MPImageResize.egg-info/SOURCES.txt -> MPImageResize-0.0.0/MPImageResize.egg-info
copying MPImageResize.egg-info/dependency_links.txt -> MPImageResize-0.0.0/MPImageResize.egg-info
copying MPImageResize.egg-info/requires.txt -> MPImageResize-0.0.0/MPImageResize.egg-info
copying MPImageResize.egg-info/top_level.txt -> MPImageResize-0.0.0/MPImageResize.egg-info
copying resize/__init__.py -> MPImageResize-0.0.0/resize
copying resize/main.py -> MPImageResize-0.0.0/resize
copying resize/resizeimage.py -> MPImageResize-0.0.0/resize
Writing MPImageResize-0.0.0/setup.cfg
creating dist
Creating tar archive
removing 'MPImageResize-0.0.0' (and everything under it)

è stato creato un file tar.gz, con dentro il programma.
ma la libreria non c'è.
è giusto??

clasku
12-01-2017, 14:52
trasferisci il tar.gz, spacchetti e poi dai python setup.py install

se, invece, vuoi qualcosa tipo un eseguibile, puoi usare altri metodi per creare un exe che avvia il tuo codice (py2exe, ad esempio)

fermat
13-01-2017, 11:48
trasferisci il tar.gz, spacchetti e poi dai python setup.py install

se, invece, vuoi qualcosa tipo un eseguibile, puoi usare altri metodi per creare un exe che avvia il tuo codice (py2exe, ad esempio)

ciao!
allora, in verità ho una marea di problemi.
non so se è proprio pillow che è problematico.

prima di tutto il comando di installazione devo lanciarlo con privilegi elevati, sennò mi da errore:


$ sudo python3 setup.py install

ma fin qui diciamo poco male.

poi, sul sistema dove sto facendo i test (quindi non quello di sviluppo) ho dovuto installare questi pacchetti (seguendo gli errori che uscivano fuori):
- libjpeg-turb
- zlib
- gcc
- python3-devel
e quindi sto di nuovo al punto di partenza, in quanto devo installare delle dipendenze a livello di sistema.
e non penso di poter mettere queste dipendenze nel file di setup (anche perchè i pacchetti si chiamano in maniera differente tra le varie distro).

arrivato a questo punto, il processo è terminato.
ho testato il programma e funziona bene.
però, per questo tipo di dipendenze, c'è un rimedio??

clasku
13-01-2017, 12:32
ma quelle sono dipendenze di sistema, compilazione (gcc), strumenti di python per la compilazione (*-devel) ecc
non credo che tu possa fare nulla, è un po' come installare un software su linux...
a meno che non compili il tuo codice come software (che ne so, un .deb o analogo per sistemi non Debian-based), ma qui mi fermo perché non saprei neppure da dove iniziare

fermat
13-01-2017, 12:37
ma quelle sono dipendenze di sistema, compilazione (gcc), strumenti di python per la compilazione (*-devel) ecc
non credo che tu possa fare nulla, è un po' come installare un software su linux...
a meno che non compili il tuo codice come software (che ne so, un .deb o analogo per sistemi non Debian-based), ma qui mi fermo perché non saprei neppure da dove iniziare

eh si immaginavo.
volevo solo conferma di aver fatto tutto corretto.
in questo caso metterò le dipendenze richieste nel MANIFEST, in modo che l'utente possa installarsele da sole.

grazie!!

Loading