[PyVigo] "pip install" modificando shebang... es posible?

Luigi Pirelli luipir at gmail.com
Tue Nov 15 21:26:10 CET 2016


mui bien... investigare' la opción 1 :)
lo que hacemos ahora es exactamente la opcion 3) pero, como bien
dices, no nos gusta para nada y la consideramos solo un apaño... la 2)
no la tengo en consideración por las rasones que dices.

muchas gracias de las ideas
Luigi Pirelli

**************************************************************************************************
* Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
* LinkedIn: https://www.linkedin.com/in/luigipirelli
* Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
* GitHub: https://github.com/luipir
* Mastering QGIS 2nd Edition:
* https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
**************************************************************************************************


2016-11-15 19:44 GMT+01:00 José Juan Montes <jjmontes at gmail.com>:
> Ahhh. Importante el hecho de que sean módulos fuera de vuestro control :).
>
> Lo de la ruta absoluta es normal. Cada vez que "pip / setuptools" instalan
> un script, introducen el path completo al intérprete de Python (cuando usas
> la opción "console_scripts" de la que hablábamos).
>
> Esto ha sido criticado, puesto que hace los entornos de Python dependientes
> de la ruta de instalación (incluyendo también los entornos virtuales creados
> con "virtualenv", que no se pueden mover sin recrearlos).
>
> Como no tengo claro del todo tu escenario, te comento algunas ideas que se
> me ocurren:
>
> 1) No es _quizá_ la mejor práctica empaquetar en el build server todo un
> entorno de Python. En Windows, esto hará la aplicación dependiente de la
> versión de Python (x.y.z). Ciertamente no es el mayor problema si usas
> OSGeo4W como base, ya que el intérprete de Python está fijado por el propio
> OSGeo4W.
>
> Una alternativa es usar un repositorio local para las instalaciones. He
> usado pip2py para esto, que es facilísimo
> (http://stackoverflow.com/a/12525448/401656). También tienes pip-accel,
> aunque no la he probado y me parece más engorrosa. De esta manera, tu
> aplicación/entorno es más portable incluso aunque cambiase la versión de
> Python de tu entorno de destino, sin necesidad de pasar por el build server,
> y sin necesidad de conexión a la red. Tendrías que hacer la instalación de
> pip una vez activado el entorno virtual (en tu caso el entorno de OSGeo4W).
>
> Haciéndolo así también instalará los archivos con los shebangs adecuados y
> paths correspondientes al entorno Python de destino.
>
> 2) Por otra parte, puedes instalar tu aplicación y dependencias (incluyendo
> IPython) en el entorno/ruta de destino que más te convenga. Aunque tu
> paquete no debería ser dependiente de la ruta de instalación, si quisieras
> hacerlo así, puedes hacer que tu entorno de Python utilice los paquetes que
> ya están instalados por OSGeo4W. Yo sólo hago esto en entornos de
> desarrollo, porque es más feo y engorroso y no me parece muy portable.
>
> En cualquier caso, para ello tendrías que crear un archivo
> "sitecustomize.py" en el directorio Lib\site-packages de tu aplicación
> (http://stackoverflow.com/questions/10693706/creating-a-secondary-site-packages-directory-and-loading-packages-from-pth-fil)
>
> import site
> site.addsitedir('C:\\Program Files\\QGIS
> Wien\\apps\\Python27\\Lib\\site-packages')
>
> Esto hace que la instalación de Python de tu segundo entorno
>
> Y a la hora de llamar a tu aplicación, tendrías que crear algún script que
> prepare el entorno (lo que normalmente hace OSGeo4W o virtualenv). Te pongo
> un ejemplo, pero en tu caso será diferente (el ejemplo es para QGIS, no para
> OSGeo4W, y tendrás que adaptarlo):
>
> set GDAL_DATA="C:\Program Files\QGIS
> Wien\apps\grass\grass-6.4.3\etc\ogr_csv"
> set PATH="%PATH%;C:\Program Files\QGIS Wien\bin:C:\Program Files\QGIS
> Wien\apps\Python27\Lib\site-packages\numpy\core"
>
> python your_application.py
>
> Esta segunda opción la he comentado a modo de ilustración. No me parece
> recomendable excepto, como he dicho, para entornos de desarrollo, pero
> expresa cómo mantener dos entornos de Python y utilizar los módulos del
> primero desde el segundo, sin afectar al primer entorno (es decir, evitando
> "ensuciar" la instalación de OSGeo4W).
>
> Y en este segundo caso, en Windows, sigues necesitando que ambos entornos
> compartan la misma versión de Python (x.y.z) si tienes bibliotecas nativas,
> así que tu paquete que sale del build server sería igualmente dependiente
> del entorno de destino.
>
> 3) Por último, tienes la opción de añadir a tu instalación un script que
> repase todos los shebang y los altere de acuerdo al entorno en el que está
> instalado. Tampoco me gusta mucho, pero creo que sería la única forma de
> instalar una aplicación Python dentro de OSGeo4W sin permitir que pip haga
> la instalación.
>
> Sin tener claro tu caso, mi recomendación es la opción uno. Es muy fácil de
> mantener, es más portable.
>
> Espero haberme explicado y que te sirva de algo. ¡Un saludo!.
>
>
> Jose Juan Montes
>
> El 15 de noviembre de 2016, 11:13, Luigi Pirelli <luipir at gmail.com>
> escribió:
>>
>> hmmmm... seguro no me explique bien
>>
>> no estoy hablando de scripts o modulos sobre que te tenemos "control",
>> por ejemplo yo necesito instalarme ipython (en el entorno de execution
>> de OSGeo4W) y esto se hace en el build server para que todo al final
>> estea paquietizado sin mas neceistad de red.
>>
>> en el ipython.exe generado por pip, o lo que sea, hay enbedded un
>> launcher con un shebang con path absoluto al interprete y lo que
>> queria y decir a pip o pasar opciones a pip(y asi' a setuptool) para
>> que el shebang en python.exe sea #!/usr/bin/env python.
>>
>> No se si me he explicado mejor o he complicado mas el asunto :)
>>
>> Luigi Pirelli
>>
>> ps. el mundo seria mas guasy sin winzozz y sin todas las
>> complicaciones que este introduce
>>
>>
>> **************************************************************************************************
>> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
>> * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
>> * GitHub: https://github.com/luipir
>> * Mastering QGIS 2nd Edition:
>> *
>> https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
>>
>> **************************************************************************************************
>>
>>
>> 2016-11-14 17:31 GMT+01:00 José Juan Montes <jjmontes at gmail.com>:
>> > PIP no utiliza distutils.
>> >
>> > PIP descomprime el paquete y llama a setup.py con un parámetro (install
>> > o
>> > bdist_wheel) dependiendo de cómo haya sido empaquetado el proyecto.
>> >
>> > setup.py importa setuptools o distutils, el desarrollador escoge cuál
>> > usar.
>> > Lo normal es usar setuptools hoy en día.
>> >
>> > PIP no genera ningún script ni escribe ningún shebang. Esto es tarea de
>> > setuptools pero sólo cuando se usa "console_scripts". Cualquier otro
>> > script
>> > que hayas escrito, o generado, se mantendrá intacto.
>> >
>> > Saludos,
>> >
>> >
>> > Jose Juan Montes
>> >
>> > El 14 de noviembre de 2016, 16:58, Luigi Pirelli <luipir at gmail.com>
>> > escribió:
>> >>
>> >> usamos pip que me parece usa distutils
>> >>
>> >> por ejemplo yo instalo mis modulos lado build server con pip y este
>> >> escribe un shebang relacionado con python del build server => path
>> >> malo cuando se hace el install final.
>> >>
>> >> me gustaria decir a pip de poner la version mas universal que como
>> >> dices es "#!/usr/bin/env python" ya que dependera' de los valores de
>> >> PATH sobre que tenemos control... pero esto no soy capaz de ponerlo.
>> >>
>> >> itentere' ver y probar las opciones de "console_scripts" gracias
>> >>
>> >>
>> >> Luigi Pirelli
>> >>
>> >>
>> >>
>> >> **************************************************************************************************
>> >> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
>> >> * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> >> * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
>> >> * GitHub: https://github.com/luipir
>> >> * Mastering QGIS 2nd Edition:
>> >> *
>> >>
>> >> https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
>> >>
>> >>
>> >> **************************************************************************************************
>> >>
>> >>
>> >> 2016-11-14 16:47 GMT+01:00 José Juan Montes <jjmontes at gmail.com>:
>> >> > Creo que no mencionas si usas setuptools o distutils.
>> >> >
>> >> > Si estás escribiendo el script a mano, el shebang recomendado es:
>> >> >
>> >> > #!/usr/bin/env python
>> >> >
>> >> > Para incluir el script en el paquete, y dejar que pip/setuptools lo
>> >> > instale
>> >> > en un directorio adecuado que esté en el path, usarías la opción
>> >> > 'scripts'
>> >> > de setuptools en setup.py.
>> >> >
>> >> > Por otra parte, como ha dicho Miguel, puedes apuntar directamente a
>> >> > una
>> >> > función en uno de los módulos, y dejar que setuptols genere el script
>> >> > (que
>> >> > debería funcionar en cualquier plataforma). Para ello, usarías la
>> >> > opción
>> >> > 'console_scripts'  en setup.py. En tu caso es posiblemente más
>> >> > recomendable,
>> >> > ya que en mi opinión tienes más garantías de que el script sea
>> >> > portable.
>> >> >
>> >> > La documentación de ambas estrategias está en:
>> >> >
>> >> >
>> >> >
>> >> > http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html
>> >> >
>> >> > En ambos casos, setuptools instalará el script a un directorio en el
>> >> > path.
>> >> > Por defecto, esto sería /usr/local/bin en Linux. Sin embargo, si
>> >> > estás
>> >> > usando un virtualenv, setuptools lo instalará correctamente a
>> >> > env/bin/
>> >> > (Linux) o a env/Scripts (Windows), que también están en el path
>> >> > cuando
>> >> > se
>> >> > activa el virtualenv.
>> >> >
>> >> > ¡Un saludo!
>> >> >
>> >> >
>> >> > Jose Juan Montes
>> >> >
>> >> > El 14 de noviembre de 2016, 16:08, Miguel González Álvarez
>> >> > <migonzalvar at gmail.com> escribió:
>> >> >>
>> >> >> Hola Luigi.
>> >> >>
>> >> >> Sé que no es tu pregunta pero no sé si se podría resolver tu
>> >> >> problemática
>> >> >> usando el `console_scripts entry point`. En Windows, setuptools crea
>> >> >> un
>> >> >> archivo .exe que ejecuta el script. Te aseguras así que se ejecuta
>> >> >> dentro
>> >> >> del entorno.
>> >> >>
>> >> >> En
>> >> >>
>> >> >>
>> >> >> http://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation
>> >> >> pone:
>> >> >>
>> >> >> > On Windows, a set of foo.exe, bar.exe, and baz.exe launchers are
>> >> >> > created, alongside a set of foo.py, bar.py, and baz.pyw files. The
>> >> >> > .exe
>> >> >> > wrappers find and execute the right version of Python to run the
>> >> >> > .py
>> >> >> > or .pyw
>> >> >> > file.
>> >> >>
>> >> >> Un saludo.
>> >> >>
>> >> >> 2016-11-14 15:49 GMT+01:00 Luigi Pirelli <luipir at gmail.com>:
>> >> >>>
>> >> >>> si esto si, por esto que pip hace una cosa rara (para mi)
>> >> >>> construiendo
>> >> >>> un .exe con un launcher
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> https://github.com/pypa/pip/blob/master/pip/_vendor/distlib/scripts.py#L205
>> >> >>>
>> >> >>>
>> >> >>> Luigi Pirelli
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> **************************************************************************************************
>> >> >>> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT
>> >> >>> com
>> >> >>> * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> >> >>> * Stackexchange:
>> >> >>> http://gis.stackexchange.com/users/19667/luigi-pirelli
>> >> >>> * GitHub: https://github.com/luipir
>> >> >>> * Mastering QGIS 2nd Edition:
>> >> >>> *
>> >> >>>
>> >> >>>
>> >> >>> https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> **************************************************************************************************
>> >> >>>
>> >> >>>
>> >> >>> 2016-11-14 15:33 GMT+01:00 Carlos Goce <carlosgoce at gmail.com>:
>> >> >>> > Por si te sirve de ayuda. Sólo te puedo comentar que me parece
>> >> >>> > que
>> >> >>> > Windows
>> >> >>> > ignora completamente los Shebang.
>> >> >>> >
>> >> >>> >
>> >> >>> > El 14/11/2016 3:30 p. m., "Luigi Pirelli" <luipir at gmail.com>
>> >> >>> > escribió:
>> >> >>> >>
>> >> >>> >> hmmmm... con mucha probabilidad non es un problema de setup pero
>> >> >>> >> de
>> >> >>> >> pip... creo que pip llega a crear el shebang de defauult aqui
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> https://github.com/pypa/pip/blob/master/pip/_vendor/distlib/scripts.py#L152
>> >> >>> >> Luigi Pirelli
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> **************************************************************************************************
>> >> >>> >> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo
>> >> >>> >> DOT
>> >> >>> >> com
>> >> >>> >> * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> >> >>> >> * Stackexchange:
>> >> >>> >> http://gis.stackexchange.com/users/19667/luigi-pirelli
>> >> >>> >> * GitHub: https://github.com/luipir
>> >> >>> >> * Mastering QGIS 2nd Edition:
>> >> >>> >> *
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> **************************************************************************************************
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> 2016-11-14 15:06 GMT+01:00 Luigi Pirelli <luipir at gmail.com>:
>> >> >>> >> > Hola
>> >> >>> >> >
>> >> >>> >> > tenemos un problema de epaquetamiento de modulos python... y
>> >> >>> >> > especificatamente esto nos pasa en win.
>> >> >>> >> >
>> >> >>> >> > nos preparamos un installer en un build server, y en este
>> >> >>> >> > build
>> >> >>> >> > server
>> >> >>> >> > instalamos los modulos que necesitamos => los scripts
>> >> >>> >> > instalados
>> >> >>> >> > tienen una stringa shebang echa asi'
>> >> >>> >> >
>> >> >>> >> > #!</path/to/python_in_build_server>
>> >> >>> >> >
>> >> >>> >> > esto es en general #!/user/bin/python o
>> >> >>> >> > #!/user/local/bin/python
>> >> >>> >> >
>> >> >>> >> > pero a pasa la istalación en windows y usando un interprete
>> >> >>> >> > python
>> >> >>> >> > (embedded) nuesto #shebang tendría que ser
>> >> >>> >> >
>> >> >>> >> > #!</path/to/python_embedded>
>> >> >>> >> > y esto puede cambiar en función de donde se instala el script.
>> >> >>> >> >
>> >> >>> >> > asi' que necesitariamos poner una stringa shebang que se la
>> >> >>> >> > mas
>> >> >>> >> > generica posible y que sea capaz de puntar al python embedded.
>> >> >>> >> >
>> >> >>> >> > en general sería guay solucionarlo con los build options de
>> >> >>> >> > setup.py
>> >> >>> >> > como en (el build server es winzozz)
>> >> >>> >> > pip.exe install --global-option=build
>> >> >>> >> > --global-option='--executable="/usr/bin/env python" ' <package
>> >> >>> >> > name>
>> >> >>> >> >
>> >> >>> >> > pero el resultato siempre sale:
>> >> >>> >> >
>> >> >>> >> > #!python.exe
>> >> >>> >> >
>> >> >>> >> > asi' que puede ser que busca el executable y a no encontrarlo
>> >> >>> >> > pone
>> >> >>> >> > el
>> >> >>> >> > default (estoy en el codigo de distutils viendo que hace)
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> > otra opción esn pyLauncher
>> >> >>> >> > (https://www.python.org/dev/peps/pep-0397/)
>> >> >>> >> > pero bno se cuanto sea una solución adoptada en el mundo
>> >> >>> >> > python...
>> >> >>> >> > el
>> >> >>> >> > desarrollo de pyLancher es parado hace tiempo y no veo muchos
>> >> >>> >> > que
>> >> >>> >> > lo
>> >> >>> >> > utilizan (pero podría equivocarme)
>> >> >>> >> >
>> >> >>> >> > asi' venimos a la PREGUNTA
>> >> >>> >> >
>> >> >>> >> > hay una forma de pasar parametros a setup.py para que se pueda
>> >> >>> >> > setear
>> >> >>> >> > la stringa shebang?
>> >> >>> >> >
>> >> >>> >> > Luigi Pirelli
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> > **************************************************************************************************
>> >> >>> >> > * Boundless QGIS Support/Development: lpirelli AT boundlessgeo
>> >> >>> >> > DOT
>> >> >>> >> > com
>> >> >>> >> > * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> >> >>> >> > * Stackexchange:
>> >> >>> >> > http://gis.stackexchange.com/users/19667/luigi-pirelli
>> >> >>> >> > * GitHub: https://github.com/luipir
>> >> >>> >> > * Mastering QGIS 2nd Edition:
>> >> >>> >> > *
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> > https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> > **************************************************************************************************
>> >> >>> >> _______________________________________________
>> >> >>> >> Asociación Python España: http://www.es.python.org/
>> >> >>> >> Python Vigo: http://www.python-vigo.es/
>> >> >>> >> Vigo mailing list
>> >> >>> >> Vigo at lists.es.python.org
>> >> >>> >> https://lists.es.python.org/listinfo/vigo
>> >> >>> >
>> >> >>> >
>> >> >>> > _______________________________________________
>> >> >>> > Asociación Python España: http://www.es.python.org/
>> >> >>> > Python Vigo: http://www.python-vigo.es/
>> >> >>> > Vigo mailing list
>> >> >>> > Vigo at lists.es.python.org
>> >> >>> > https://lists.es.python.org/listinfo/vigo
>> >> >>> _______________________________________________
>> >> >>> Asociación Python España: http://www.es.python.org/
>> >> >>> Python Vigo: http://www.python-vigo.es/
>> >> >>> Vigo mailing list
>> >> >>> Vigo at lists.es.python.org
>> >> >>> https://lists.es.python.org/listinfo/vigo
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Miguel González
>> >> >> migonzalvar at gmail.com
>> >> >> PGP ID: 0C63761BEEBD05D3
>> >> >>
>> >> >> _______________________________________________
>> >> >> Asociación Python España: http://www.es.python.org/
>> >> >> Python Vigo: http://www.python-vigo.es/
>> >> >> Vigo mailing list
>> >> >> Vigo at lists.es.python.org
>> >> >> https://lists.es.python.org/listinfo/vigo
>> >> >
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > Asociación Python España: http://www.es.python.org/
>> >> > Python Vigo: http://www.python-vigo.es/
>> >> > Vigo mailing list
>> >> > Vigo at lists.es.python.org
>> >> > https://lists.es.python.org/listinfo/vigo
>> >> _______________________________________________
>> >> Asociación Python España: http://www.es.python.org/
>> >> Python Vigo: http://www.python-vigo.es/
>> >> Vigo mailing list
>> >> Vigo at lists.es.python.org
>> >> https://lists.es.python.org/listinfo/vigo
>> >
>> >
>> >
>> > _______________________________________________
>> > Asociación Python España: http://www.es.python.org/
>> > Python Vigo: http://www.python-vigo.es/
>> > Vigo mailing list
>> > Vigo at lists.es.python.org
>> > https://lists.es.python.org/listinfo/vigo
>> _______________________________________________
>> Asociación Python España: http://www.es.python.org/
>> Python Vigo: http://www.python-vigo.es/
>> Vigo mailing list
>> Vigo at lists.es.python.org
>> https://lists.es.python.org/listinfo/vigo
>
>
>
> _______________________________________________
> Asociación Python España: http://www.es.python.org/
> Python Vigo: http://www.python-vigo.es/
> Vigo mailing list
> Vigo at lists.es.python.org
> https://lists.es.python.org/listinfo/vigo


More information about the Vigo mailing list