Python sys.path la modificación no funciona

Estoy intentando modificar el sys.path en uno de mis archivos de Python para tener algunas direcciones de bibliotecas específicas en la ruta de búsqueda de módulos (puede que no sea la mejor manera pero …). Si inserto varias rutas en el frente de sys.path, mi secuencia de comandos no tiene en cuenta esas rutas para futuras importaciones. Si hago una lista completamente nueva que contiene los directorios de bibliotecas que necesito y asigno esa lista a sys.path, entonces esas importaciones se tienen en cuenta. ¿Es este el comportamiento correcto? Estoy usando python 2.5.4. ¿Podría ser algo de mi entorno que podría conducir a tal comportamiento?

Algunos fragmentos de código: si lo hago

 pathtoInsert1 = " .... " pathtoInsert2 = " .... " sys.path.insert(0, pathToInsert1) sys.path.insert(0, pathToInsert2) 

No funciona. No tiene en cuenta los caminos.

Si lo hago

 pathList = [pathToInsert1, pathToInsert2] 
 sys.path = pathList

funciona.

Gracias

Realmente necesitas publicar algún código para que podamos ayudarte. Sin embargo, puedo hacer una conjetura educada. Usted dice que si hace una lista completamente nueva y la asigna a sys.path, entonces funciona. Supongo que quieres decir que estás haciendo algo como esto

 sys.path = ["dir1", "dir2", ...] 

Pero si inserta las rutas al principio no funcionará. Mi conjetura es que estás usando el método de inserción, como tal

 sys.path.insert(0, ["dir1", "dir2"]) 

Si es así, entonces esto es incorrecto. Esto crearía una lista que parece

 [["dir1", "dir2"], "dir3", ...] 

En su lugar deberias decir

 sys.path[:0] = ["dir1", "dir2"] 

que te dará

 ["dir1", "dir2", "dir3", ...] 

Pero esto es todo conjeturas hasta que publique su código.

Ejemplo de actualización de sys.path tomado desde aquí

 import sys sys.path.append("/home/me/mypy") 

Esto funcionó para mí.

¿Cómo estás “insertando” los caminos adicionales?

La modificación de la ruta se realiza de la misma manera que se modifica cualquier otra lista en Python, aunque suena como si simplemente la estuvieras obstruyendo al reasignarla.

Ejemplo de actualización de sys.path: http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html

Acabo de tener un problema similar mientras trabajaba en iPython con módulos que se distribuyen en varios directorios. En ese caso, para que la importación funcione, uno debe asegurarse de que el module.__path__ de los módulos con __init__.py distribuido incluye todos los directorios donde está uno de los __init__.py del módulo, así como asegurarse de que el directorio correcto esté en el sys Lista de rutas.

Por ejemplo, tengo un módulo llamado foo, que contiene un módulo llamado barra que se distribuye en varios directorios:

 aerith/foo/bar/__init__.py aerith/foo/bar/baz/__init__.py bob/foo/bar/__init__.py bob/foo/bar/baf/__init__.py carol/foo/bar/__init__.py carol/foo/bar/quux/__init__.py 

En iPython, ya había importado baz and baf, y quería importar quux.

from foo.bar import quux

Esto dio un ImportError, porque carol no estaba en sys.path , pero sys.path.append('carol') no solucionó el ImportError.

Lo que se requería era informar al módulo de bar que uno de sus __init__.py podía encontrar en ‘carol / foo / bar’.

 foo.bar.__path__.append('carol/foo/bar') from foo.bar import quux