Ya que mencionas que este es Python 3, no es necesario que agregue lo siguiente a sus archivos .py
. Aun así, aunque, ya que ayuda al revés portabilidad si algún pobre diablo que está pegado en Python 2 tiene que utilizar su código:
from __future__ import absolute_import
Dado que usted está utilizando Python 3, o que está utilizando Python 2 y ha incluido la línea anterior, aquí es su respuesta:
de main.py
:
import pkg1.util as util
de test.py
que usaría una de dos maneras dependiendo de si se considera pkg1
y pkg2
estar cosas que siempre se implementarían juntas de la misma manera en relación entre sí, o si, en cambio, siempre se implementarán de forma semiindependiente en el nivel superior. Si la primera, que podría hacer esto:
from ..pkg1 import util
y si es la segunda opción, esto:
import pkg1.util as util
Esto implica, por supuesto, que siempre está ejecutando Python desde el directorio en el que main.py
es, o que ese directorio está en PYTHONPATH
o termina en sys.path
por algún motivo (como ser el principal directorio de paquetes de sitios de Python, por ejemplo).
Si existe un 'pkg1' diferente por alguna razón en' PYPATH', ¿seguiré obteniendo * this * 'pkg1' con estas dos opciones? –
@aharon: no existe ninguna opción que le prometa que obtendrá el 'pkg1' previsto sin tener que jugar con' sys.path' usted mismo para asegurarse de que el directorio apropiado sea el primero en la ruta. Tener nombres de paquete conflictivos de esta manera es una muy mala idea a menos que tenga un sistema de administración de paquetes como 'setuptools' que esté administrando el paquete como un 'paquete de espacio de nombres'. – Omnifarious
¿No requerirá todo esto un '__init__py' en el mismo directorio que' main.py'? Tal como está, 'test.py' y' util.py' están en paquetes completamente separados que no son subpaquetes de un superpaquete común. –