Eu escrevi um módulo (um arquivo my_mod.py
que reside na pasta my_module
). Atualmente, estou trabalhando no arquivo cool_script.py
que reside na pasta cur_proj
. Abri a pasta no PyCharm usando o File - open (e presumo, portanto, que seja um projeto do PyCharm).
No ProjectView (CMD-7), posso ver meu projeto cur_proj
(em vermelho) e, em "Bibliotecas externas", vejo my_module
. Em cool_script.py, eu posso escrever
from my_module import my_mod as mm
e PyCharm até faz sugestões para o my_mod. Por enquanto, tudo bem.
No entanto, quando tento executar o cool_script.py, o PyCharm me diz "Nenhum módulo chamado my_module"
Isso me parece estranho, porque
A) no terminal (OS 10.10.2), em python, posso importar o módulo sem problemas - há uma entrada correspondente no PYTHONPATH em .bashrc
B) em PyCharm - Configurações - Projeto cur_proj - Intérprete de projeto - CogWheel ao lado do interpretador python - mais - mostra caminhos para o ícone selecionado do intérprete, os caminhos do PYTHONPATH aparecem (como eu acho que deveriam)
Portanto, por que recebo o erro quando tento executar o cool_script.py? - O que estou perdendo?
Notas:
- Não estou declarando uma versão python diferente / especial na parte superior do cool_script.py
- Certifiquei-me de que o caminho para
my_module
está correto - I colocar
__init__.py
arquivos (arquivos vazios) , tanto emmy_module
e emcur_proj
- Eu não estou usando
virtualenv
Adenda 2015-fev-25
Quando vou no PyCharm para Executar - Editar configurações, no meu projeto atual, há duas opções selecionadas com uma marca de seleção: " Adicionar raízes de conteúdo ao PYTHONPATH " e " Adicionar raízes de origem ao PYTHONPATH ". Quando desmarquei os dois, posso carregar meu módulo.
Então funciona agora - mas por quê ?
Outras perguntas surgiram:
- O que são "raízes de conteúdo" e o que são "raízes de origem"? E por que adicionar algo ao PYTHONPATH faz com que ele se rompa?
- devo desmarcar essas duas opções o tempo todo (também nos padrões, não apenas nas configurações específicas do projeto (painel esquerdo da caixa de diálogo Configurações de execução / depuração)?
from foldername.mymodule import mymethod
. Outra coisa que tive que fazer é adicionar a pasta _init .py vazia em todas as pastas que você usaria para acessar o módulo, para o caso defrom parentfolder.childfolder.mymodule ...
você precisar do init em duas pastas. Dependendo de onde as pastas estão localizadas uma em relação à outra, talvez seja necessário que você tenha um pacote de nível superior,sys.path
conforme descrito nesta respostaEnable Django Support
as configuraçõesLanguages & Frameworks -> Django
na versão Pro do PyCharm. Estava abrindo um console django que causou problemas de importação.Respostas:
Se o seu próprio módulo estiver no mesmo caminho, você precisará marcar o caminho como
Sources Root
. No explorador de projetos, clique com o botão direito do mouse no diretório que você deseja importar. Depois selecioneMark Directory As
e selecioneSources Root
.Eu espero que isso ajude.
fonte
__init__.py
para que Python trate os diretórios como contendo pacotes: stackoverflow.com/questions/448271/....
antes de nome do pacote para especificar que este pacote é uma locaisEntão, se você for para
-> Configuração -> Projeto: Meu_projeto -> Estrutura do projeto,
Apenas o diretório em que o código-fonte está disponível e marque-o como "Fontes" (você pode vê-lo na mesma janela). O diretório com código fonte deve ficar azul. Agora você pode importar em módulos que residem no mesmo diretório.
fonte
Comunidade PyCharm / Profissional 2018.2.1
Eu estava tendo esse problema agora e consegui resolvê-lo da mesma maneira que @Beatriz Fonseca e @Julie apontaram.
Se você for para
File
->Settings
->Project: YourProjectName
->Project Structure
, terá um layout de diretório do projeto em que está trabalhando atualmente. Você precisará examinar seus diretórios e rotulá-los como sendo oSource
diretório de todos os seus arquivos de origem ou como umaResource
pasta para arquivos estritamente para importação.Você também deve certificar-se de colocar os
__init__.py
arquivos nos diretórios de recursos ou em qualquer lugar a partir do qual deseja importar, e funcionará perfeitamente.Espero que esta resposta ajude alguém, e espero que o JetBrains conserte esse bug irritante.
fonte
Mark Directory as
no menu de contexto e selecioneSources Root
.O que eu tentei é fonte do local onde meus arquivos estão.
por exemplo
E:\git_projects\My_project\__init__.py is my location.
Fui para Arquivo -> Configuração -> Projeto: Meu_projeto -> Estrutura do projeto e adicionei a raiz do conteúdo ao local da menção
E:\git_projects\My_project
funcionou para mim.
fonte
/home/my_user/git_projects/this_git_project/this_pycharm_project/
. Eu adicionei/home/my_user/git_projects/this_git_project/
como raiz de conteúdo e/home/my_user/git_projects/this_git_project/this_pycharm_project/
como a única pasta de origem e tudo funcionou finalmente.my_module
é uma pasta, não um módulo e você não pode importar uma pasta, tente irmy_mod.py
para a mesma pasta que ocool_script.py
e, em seguida, façaimport my_mod as mm
. Isso ocorre porque o python apenas procura no diretório atual esys.path
, portanto, não será encontrado, amy_mod.py
menos que esteja no mesmo diretórioOu você pode procurar aqui uma resposta dizendo como importar de outros diretórios.
Quanto às suas outras perguntas, eu não sei, pois não uso o PyCharm.
fonte
Eu estava recebendo o erro com "Adicionar raízes de origem ao PYTHONPATH" também. Meu problema era que eu tinha duas pastas com o mesmo nome, como
project/subproject1/thing/src
eproject/subproject2/thing/src
e eu tive ambos marcado como raiz fonte. Quando renomeei uma das"thing"
pastas para"thing1"
(qualquer nome exclusivo), funcionou.Talvez se o PyCharm adicione automaticamente as raízes de origem selecionadas, ele não use o caminho completo e, portanto, misture pastas com o mesmo nome.
fonte
Isso pode ser causado quando o intérprete Python não consegue encontrar seu código. Você precisa mencionar explicitamente o Python para encontrar seu código nesse local.
Para fazer isso:
sys.path.extend(['your module location'])
ao console do Python.No seu caso:
No início, escreva o seguinte código:
Depois de escrever esta declaração, você pode executar o seguinte comando:
fonte
A principal etapa confusa que deve ser feita é recriar a configuração de execução do arquivo de origem que você está tentando executar, para que o IDE escolha os novos caminhos.
A maneira que realmente funcionou para mim foi ir para Executar / editar configurações ..., selecione a configuração do arquivo que você está tentando executar no lado esquerdo, desmarque a caixa "Adicionar raízes de origem ao PYTHONPATH", salve, e depois volte e marque a caixa e salve. ENTÃO funcionaria.
fonte
Invalidate Cache/Restart
duas vezes!Raízes de conteúdo são pastas contendo o código do projeto, enquanto as raízes de origem também são definidas da mesma forma. A única diferença que entendi foi que o código nas raízes de origem é criado antes do código na raiz de conteúdo.
Desmarcá-los não afetaria o tempo de execução até o ponto em que você não está criando módulos separados no seu pacote que são conectados manualmente ao Django. Isso significa que se algum dos seus arquivos não contiver o 'from django import ...' ou qualquer uma das funções não for chamada via django, desmarcar essas duas opções resultará em mau funcionamento.
Atualização - o problema só surge ao usar o Virtual Environmanet e apenas ao controlar o projeto através do terminal fornecido. Porque o terminal ainda funciona através do pyhtonpath do sistema padrão e não do ambiente virtual. enquanto o painel de controle python django funciona bem.
fonte
A solução para esse problema sem precisar marcar o diretório como raiz de origem é editar configurações de execução e, em execução, selecione a opção "Redirecionar entrada de" e escolha o script que deseja executar. Isso funciona porque é então tratado como se o script tivesse sido executado interativamente nesse diretório. No entanto, o Python ainda marcará o nome do módulo com o erro "nenhum módulo chamado x":
Quando o intérprete executa a instrução de importação, ele procura x.py em uma lista de diretórios montados nas seguintes fontes:
fonte
Pycharm 2017.1.1
View->ToolBar
&View->Tool Buttons
Project
seria visível, clique com o botão direito do mouse e pressioneAutoscroll to source
e, em seguida, execute seu código.Isso funcionou para mim.
fonte
ln -s. someProject
Se você tiver someDirectory / someProjectDir e dois arquivos, file1.py e file2.py e file1.py tentarão importar com esta linha
de algum arquivo de importação do ProjectPro2
Ele não funcionará, mesmo que você tenha designado o someProjectDir como um diretório de origem e mesmo que seja exibido nas preferências, projeto, menu da estrutura do projeto como raiz do conteúdo. A única maneira de funcionar é vinculando o projeto como mostrado acima (comando unix, funciona no mac, não tem certeza do uso ou sintaxe do Windows). Parece haver algum mecanismo em que o Pycharm faz isso automaticamente no checkout do controle de versão ou na adição como raiz de contexto, pois o link flexível foi criado pelo Pycharm em um projeto dependente. Portanto, basta copiar o mesmo, embora a estranha replicação de diretório seja irritante e a necessidade seja desconcertante. Também na dependência em que criado automaticamente, ele não aparece como novo diretório sob controle de versão. Talvez a comparação dos arquivos .idea revele mais.
fonte
A resposta que funcionou para mim foi o que o OP menciona na atualização de 2015: desmarque essas duas caixas na configuração de execução do Python:
Eu já tinha a configuração de execução definida para usar o venv adequado, portanto, o PyCharm não fazia nenhum trabalho adicional para adicionar coisas ao caminho. Em vez disso, estava causando erros.
fonte