No puedo importar mis propios módulos en Python

Me cuesta entender cómo funciona la importación de módulos en Python (nunca lo he hecho en ningún otro idioma antes tampoco).

Digamos que tengo:

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

Ahora estoy tratando de conseguir 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 su caso particular, parece que está intentando importar SomeObject desde los scripts myapp.py y TestCase.py. Desde myapp.py, haz

 import SomeObject 

ya que se encuentra en la misma carpeta. Para TestCase.py, hacer

 from ..myapp import SomeObject 

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

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

aunque eso generalmente no se recomienda.

En general, si desea que otras personas utilicen su paquete de Python, debe usar distutils para crear un script de configuración. De esa manera, cualquier persona 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 puede agregarlo al Índice del paquete Python, PyPI .

La función de import busca archivos en su env de PYTHONPATH. variable y su directorio local. Por lo tanto, puede poner todos sus archivos en el mismo directorio o exportar la ruta escribiendo en un terminal:

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

exportar ruta es una buena manera Otra forma es agregar un .pth a la ubicación de los paquetes de su sitio. En mi mac, my python mantiene los paquetes de sitios en / Library / Python como se muestra 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 puse la siguiente ruta que hace referencia a mis módulos impresionantes

 /opt/awesome/custom_python_modules 

Puedes probar

 from myapp.myapp import SomeObject 

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

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 comandos, use pip install -e. para instalar el paquete

En mi caso, fue una sorpresa entre Windows y 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í lo es. Así que si tienes el archivo Stuff.py necesitas importar este nombre como está.

pip install en Windows 10 se pip install de forma predeterminada en ‘Archivos de progtwig / PythonXX / Lib / sitio-paquetes’, que es un directorio que requiere privilegios administrativos. Así que solucioné mi problema ejecutando pip install como Administrador (tienes que abrir el símbolo del sistema como administrador, incluso si has iniciado sesión con una cuenta de administrador). Además, es más seguro llamar a pip desde python.
p.ej
python -m pip install
en lugar de
pip install