2008-11-17 27 views
5

El problema es simple:¿Cómo agrego un directorio con dos puntos a PYTHONPATH?

Usando bash, quiero agregar un directorio a mi PYTHONPATH para facilitar la ejecución de la secuencia de comandos. Desafortunadamente, el directorio que quiero usar tiene un: en él. Así que pruebo cada uno de los siguientes

export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com:3344/ 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com\:3344/ 
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com:3344/" 

Ninguno de estos funciona. Cada vez, la ruta se crea como dos directorios separados en la ruta en python. Mi pregunta es, ¿es posible hacer esto para bash? Si es así, ¿cuál es la sintaxis requerida?

+7

¿Por qué no cambiar el nombre de las carpetas de modo que el ":" se sustituye con otra cosa? ¿O eliminado por completo? –

+1

@OJ: ¡Excelente pregunta! Lo cual podría devolver un comentario. –

+0

@ S.Lott La ironía :) ¿Fuiste tú quien solicitó la votación positiva en los comentarios? – orokusaki

Respuesta

8

El problema no está en bash. Debería establecer su variable de entorno correctamente, completar con el carácter :.

El problema, en cambio, es con el análisis de Python de la variable PYTHONPATH. Siguiendo el ejemplo establecido por PATH variable, parece que no hay ningún carácter de escape, por lo que no hay forma de interpretar el : como algo más que un separador. Puede verlo usted mismo en el Python interpreter source code.

La única solución es, como varias personas ya lo mencionaron, usar un enlace simbólico u otra cosa para permitirle dar un nombre sin dos puntos para sus directorios.

+2

Por lo tanto, es un error en Python: un personaje especial que no se puede escapar. – Svante

+1

@Harleqin: Entonces, usted no sabe qué es un error: algo que no funciona como dice la especificación. – tzot

2

Sólo hay una que no lo intenta:

export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/" 

El problema es sin las comillas, el escape se interpreta directamente, y se convierte en un literal ":" en la cadena. Pero el ":" necesita ser evaluado más tarde.

$ echo "foo:" 
foo: 
$ echo \:foo 
:foo 
$ echo ":foo" 
:foo 
$ echo "\:foo" 
\:foo 

No puedo garantizar esto solucionará su problema pitón-camino, pero va a obtener la \ literal en la cadena.

1

No sé si lo que quieres es directamente posible, pero una solución si estás usando un sistema de archivos linux sería crear un enlace simbólico a tu directorio "colonizado" y agregar este enlace simbólico a tu PYTHONPATH así:

ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344 
0

El hack de enlace simbólico es probablemente la única opción viable, a menos que haya alguna heurística para determinar cómo manejar dos puntos en PYTHONPATH.

0

El OP intentaba agregar una URL con un número de puerto a una lista de rutas de archivos. Este tipo de URL no es una ruta de archivo, por lo que python nunca encontraría un archivo de Python en esa ubicación. No tiene sentido poner una URL con un número de puerto en PYTHONPATH.

pesar de todo, algunas personas pueden terminar en esta pregunta por lo siguiente:

En sendas ventanas tienen designadores unidad seguida de dos puntos, al igual que C:/Python27/lib. En bash en Windows puede agregar varios caminos para PYTHONPATH con un punto y coma así:

$ export PYTHONPATH="C:\MYPATH1;C:\MYPATH2" 
$ python -i 
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', 'C:\\MYPATH1', 'C:\\MYPATH2', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin'] 
Cuestiones relacionadas