operator modules from another python import module package

modules - python packages



No puedo importar mis propios módulos en Python (6)

Me está costando entender cómo funciona la importación de módulos en Python (nunca antes lo había hecho en otro idioma).

Digamos que tengo:

myapp/__init__.py myapp/myapp/myapp.py myapp/myapp/SomeObject.py myapp/tests/TestCase.py

Ahora estoy tratando de obtener algo como esto:

myapp.py =================== from myapp import SomeObject # stuff ... TestCase.py =================== from myapp import SomeObject # some tests on SomeObject

Sin embargo, definitivamente estoy haciendo algo mal ya que Python no puede ver que myapp es un módulo:

ImportError: No module named myapp


En mi caso fue sorpresa de Windows vs Python, a pesar de que los nombres de archivo de Windows no distinguen entre mayúsculas y minúsculas, la importación de Python sí. Entonces, si tiene el archivo Stuff.py , necesita importar este nombre tal como está.


En su caso particular, parece que está intentando importar SomeObject de los scripts myapp.py y TestCase.py. Desde myapp.py, haz

import SomeObject

ya que está en la misma carpeta. Para TestCase.py, hacer

from ..myapp import SomeObject

Sin embargo , esto funcionará solo si está importando TestCase del paquete. Si quieres ejecutar python TestCase.py directamente, tendrías que meterse con tu ruta. Esto se puede hacer dentro de Python:

import sys sys.path.append("..") from myapp import SomeObject

aunque eso generalmente no es recomendable.

En general, si desea que otras personas usen su paquete de Python, debe usar distutils para crear un script de instalación. De esta forma, cualquiera puede instalar su paquete fácilmente usando un comando como python setup.py install y estará disponible en todas partes en su máquina. Si se toma en serio el paquete, incluso podría agregarlo al Python Package Index, PyPI .


En su primer directorio myapp, puede agregar un archivo setup.py y agregar dos códigos python en setup.py

from setuptools import setup setup(name=''myapp'')

en su primer directorio myapp en la línea de comando, use pip install -e. para instalar el paquete


La función de import busca archivos en su env PYTHONPATH. variable y su directorio local. Así que puedes poner todos tus archivos en el mismo directorio o exportar la ruta escribiendo en un terminal ::

export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"


Puedes probar

from myapp.myapp import SomeObject

porque el nombre de su proyecto es el mismo que el myapp.py que hace que busque primero en el documento del proyecto


exportar ruta es una buena manera. Otra forma es agregar un .pth a su ubicación de paquetes de sitio. En mi Mac, mi python guarda los paquetes de sitio en / Library / Python que se muestran a continuación

/Library/Python/2.7/site-packages

Creé un archivo llamado awesome.pth en /Library/Python/2.7/site-packages/awesome.pth y en el archivo pongo la siguiente ruta que hace referencia a mis increíbles módulos

/opt/awesome/custom_python_modules