He escrito un módulo (un archivo my_mod.py
que reside en la carpeta my_module
). Actualmente, estoy trabajando en el archivo cool_script.py
que reside en la carpeta cur_proj
. He abierto la carpeta en PyCharm usando File - open (y supongo, por lo tanto, es un proyecto de PyCharm).
En ProjectView (CMD-7), puedo ver mi proyecto cur_proj
(en rojo) y en "Bibliotecas externas" sí veo my_module
. En cool_script.py, puedo escribir
from my_module import my_mod as mm
y PyCharm incluso hace sugerencias para my_mod. Hasta aquí todo bien.
Sin embargo, cuando intento ejecutar cool_script.py, PyCharm me dice "Ningún módulo llamado my_module"
Esto me parece extraño, porque
A) en el terminal (OS 10.10.2), en python, puedo importar el módulo sin problemas: hay una entrada correspondiente en PYTHONPATH en .bashrc
B) en PyCharm - Configuración - Proyecto cur_proj - Intérprete de proyecto - CogWheel junto al intérprete de Python - más - mostrar rutas para el icono de intérprete seleccionado, las rutas de PYTHONPATH aparecen (como creo que deberían)
Por lo tanto, ¿por qué recibo el error cuando intento ejecutar cool_script.py? - ¿Qué me estoy perdiendo?
Notas:
- No estoy declarando una versión de python diferente / especial en la parte superior de cool_script.py
- Me aseguré de que el camino hacia fuera
my_module
correcto - Me puse
__init__.py
archivos (archivos vacíos) , tanto enmy_module
y encur_proj
- No estoy usando
virtualenv
Anexo 2015-Feb-25
Cuando en PyCharm para ejecutar - Editar configuraciones, para mi proyecto actual, hay dos opciones que se seleccionan con una marca de verificación: " Agregar raíces de contenido a PYTHONPATH " y " Agregar raíces de origen a PYTHONPATH ". Cuando tengo ambos desmarcados, puedo cargar mi módulo.
Entonces funciona ahora, pero ¿por qué ?
Surgieron otras preguntas:
- ¿Qué son las "raíces de contenido" y qué son las "raíces de origen"? ¿Y por qué agregar algo al PYTHONPATH hace que de alguna manera se rompa?
- ¿Debo desmarcar ambas opciones todo el tiempo (también en los valores predeterminados, no solo en las configuraciones específicas del proyecto (panel izquierdo del cuadro de diálogo Ejecutar / Depurar configuraciones)?
from foldername.mymodule import mymethod
. Otra cosa que he tenido que hacer es agregar la carpeta vacía _init .py en todas las carpetas que usaría para acceder a su módulo, por lo que en caso defrom parentfolder.childfolder.mymodule ...
que necesite init en dos carpetas. Dependiendo de dónde se encuentren las carpetas entre sí, es posible que necesite un paquete de nivel superiorsys.path
como se describe en esta respuestaEnable Django Support
la configuraciónLanguages & Frameworks -> Django
en la versión Pro de PyCharm. Estaba abriendo una consola de django que causó los problemas de importación.Respuestas:
Si su propio módulo está en la misma ruta, debe marcar la ruta como
Sources Root
. En el explorador de proyectos, haga clic derecho en el directorio que desea importar. Luego seleccioneMark Directory As
y seleccioneSources Root
.Espero que esto ayude.
fuente
__init__.py
para hacer que Python trate los directorios como paquetes que contienen: stackoverflow.com/questions/448271/….
antes del nombre del paquete para especificar que este paquete es localEntonces si vas a
-> Configuración -> Proyecto: Mi_proyecto -> Estructura del proyecto,
Solo el directorio en el que está disponible el código fuente y márquelo como "Fuentes" (puede verlo en la misma ventana). El directorio con el código fuente debe volverse azul. Ahora puede importar en módulos que residen en el mismo directorio.
fuente
PyCharm Community / Professional 2018.2.1
Estaba teniendo este problema en este momento y pude resolverlo de una manera similar a la que señalaron @Beatriz Fonseca y @Julie.
Si va a
File
->Settings
->Project: YourProjectName
->Project Structure
, tendrá un diseño de directorio del proyecto en el que está trabajando actualmente. Deberá revisar sus directorios y etiquetarlos como elSource
directorio de todos sus archivos de origen. , o como unaResource
carpeta para archivos que son estrictamente para importar.También querrá asegurarse de colocar los
__init__.py
archivos dentro de sus directorios de recursos, o realmente en cualquier lugar desde el que desee importar, y funcionará perfectamente bien.Espero que esta respuesta ayude a alguien, y espero que JetBrains repare este molesto error.
fuente
Mark Directory as
del menú contextual y seleccioneSources Root
.Lo que intenté es buscar la ubicación donde están mis archivos.
p.ej
E:\git_projects\My_project\__init__.py is my location.
Fui a Archivo -> Configuración -> Proyecto: Mi_proyecto -> Estructura del proyecto y agregué la raíz de contenido al lugar de mención
E:\git_projects\My_project
Funcionó para mí.
fuente
/home/my_user/git_projects/this_git_project/this_pycharm_project/
. Agregué/home/my_user/git_projects/this_git_project/
como raíz de contenido y/home/my_user/git_projects/this_git_project/this_pycharm_project/
como la única carpeta de origen y todo finalmente funcionó.my_module
es una carpeta, no un módulo y no puede importar una carpeta, intente moversemy_mod.py
a la misma carpeta quecool_script.py
y luego hagaimport my_mod as mm
. Esto se debe a que Python solo busca en el directorio actual ysys.path
, por lo tanto, no lo encontrará amy_mod.py
menos que esté en el mismo directorioO puede buscar aquí una respuesta que le indique cómo importar desde otros directorios.
En cuanto a sus otras preguntas, no sé, ya que no uso PyCharm.
fuente
También recibí el error "Agregar raíces de origen a PYTHONPATH". Mi problema era que tenía dos carpetas con el mismo nombre, como
project/subproject1/thing/src
yproject/subproject2/thing/src
y tuve ambos marcados como root fuente. Cuando cambié el nombre de una de las"thing"
carpetas a"thing1"
(cualquier nombre único), funcionó.Tal vez si PyCharm agrega automáticamente las raíces de origen seleccionadas, no usa la ruta completa y, por lo tanto, mezcla carpetas con el mismo nombre.
fuente
Esto puede ser causado cuando el intérprete de Python no puede encontrar su código. Debe mencionar explícitamente a Python para encontrar su código en esta ubicación.
Para hacerlo:
sys.path.extend(['your module location'])
a la consola de Python.En tu caso:
Al principio, escriba el siguiente código:
Una vez que haya escrito esta declaración, puede ejecutar el siguiente comando:
fuente
El paso clave confuso que debe hacerse es recrear la configuración de ejecución para el archivo fuente que está intentando ejecutar, de modo que el IDE tome las nuevas rutas.
La forma en que realmente funcionó para mí fue ir a Ejecutar / Editar configuraciones ..., seleccionar la configuración para el archivo que está intentando ejecutar en el lado izquierdo, desmarcar la casilla "Agregar raíces de origen a PYTHONPATH", guardar, y luego regrese y marque la casilla y guarde. ENTONCES funcionaría.
fuente
Invalidate Cache/Restart
dos veces!Las raíces de contenido son carpetas que contienen el código de su proyecto, mientras que las raíces de origen también se definen de la misma manera. La única diferencia que llegué a entender fue que el código en las raíces de origen se construye antes que el código en la raíz de contenido.
Desmarcarlos no afectaría el tiempo de ejecución hasta el punto en que no esté creando módulos separados en su paquete que estén conectados manualmente a Django. Eso significa que si alguno de sus archivos no contiene 'desde django import ...' o si alguna de las funciones no se llama a través de django, desmarcar estas 2 opciones resultará en un mal funcionamiento.
Actualización: el problema solo surge cuando se utiliza Virtual Environmanet y solo cuando se controla el proyecto a través del terminal proporcionado. Porque el terminal aún funciona a través del sistema predeterminado pyhtonpath y no a través del entorno virtual. mientras que el panel de control de python django funciona bien.
fuente
La solución para este problema sin tener que marcar el directorio como raíz de origen es editar las configuraciones de ejecución y, en Ejecución, seleccionar la opción "Redirigir entrada desde" y elegir la secuencia de comandos que desea ejecutar. Esto funciona porque luego se trata como si el script se ejecutara interactivamente en este directorio. Sin embargo, Python seguirá marcando el nombre del módulo con un error "ningún módulo llamado x":
Cuando el intérprete ejecuta la declaración de importación, busca x.py en una lista de directorios reunidos de las siguientes fuentes:
fuente
Pycharm 2017.1.1
View->ToolBar
&View->Tool Buttons
Project
estaría visible, haga clic derecho sobre él y presioneAutoscroll to source
y luego ejecute su código.Esto funcionó para mí.
fuente
ln -s. algunProyecto
Si tiene someDirectory / someProjectDir y dos archivos, file1.py y file2.py, y file1.py intenta importar con esta línea
desde algún archivo de importación ProjectProir2
No funcionará, incluso si ha designado someProjectDir como directorio de origen, e incluso si aparece en las preferencias, proyecto, menú de estructura del proyecto como raíz de contenido. La única forma en que funcionará es vinculando el proyecto como se muestra arriba (comando unix, funciona en mac, no estoy seguro de su uso o sintaxis para Windows). Parece que hay algún mecanismo en el que Pycharm hace esto automáticamente, ya sea en el pago desde el control de versión o agregando como raíz de contexto, ya que Pycharm creó el enlace suave en un proyecto dependiente. Por lo tanto, solo copiar lo mismo, aunque la extraña réplica del directorio es molesta y la necesidad es desconcertante. También en la dependencia donde se creó automáticamente, no se muestra como un nuevo directorio bajo control de versiones. Quizás la comparación de archivos .idea revelará más.
fuente
La respuesta que funcionó para mí fue lo que OP menciona en su actualización de 2015: desmarque estas dos casillas en su configuración de ejecución de Python:
Ya tenía la configuración de ejecución configurada para usar el venv adecuado, por lo que PyCharm no realizó ningún trabajo adicional para agregar cosas a la ruta. En cambio, estaba causando errores.
fuente