Meu python de alguma forma não consegue encontrar nenhum módulo no mesmo diretório. O que estou fazendo errado? (python2.7)
Portanto, tenho um diretório '2014_07_13_test', com dois arquivos nele:
- test.py
- ola.py
onde hello.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
def hello1():
print 'HelloWorld!'
e test.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
from hello import hello1
hello1()
Ainda python me dá
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in <module>
ImportError: No module named hello
O que há de errado?
import sys; sys.path
>>> import test
Respostas:
Seu código está bom, suspeito que seu problema seja como você o está iniciando.
Você precisa iniciar o python de seu diretório '2014_07_13_test'.
Abra um prompt de comando e 'cd' em seu diretório '2014_07_13_test'.
Por exemplo:
Se você não puder 'cd' no diretório como este, você pode adicioná-lo ao sys.path
Em test.py:
import sys, os sys.path.append('/path/to/2014_07_13_test')
Ou defina / edite o PYTHONPATH
E tudo deve ficar bem ...
... bem, há um pequeno erro com suas linhas 'shebang' (a primeira linha em ambos os arquivos), não deve haver um espaço entre o '#' e o '!'
Há um shebang melhor que você deve usar.
Além disso, você não precisa da linha shebang em todos os arquivos ... apenas aqueles que você pretende executar a partir do seu shell como arquivos executáveis.
fonte
Altere sua importação em test.py para:
from .hello import hello1
fonte
from . import hello
from . import local_module
Eu tive um problema semelhante, resolvi adicionando explicitamente o diretório do arquivo à lista de caminhos:
import os import sys file_dir = os.path.dirname(__file__) sys.path.append(file_dir)
Depois disso, não tive problemas para importar do mesmo diretório.
fonte
Aqui está a solução genérica que uso. Resolve o problema de importação de módulos na mesma pasta:
import os.path import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
Coloque isso no topo do módulo, o que dará o erro "Nenhum módulo chamado xxxx"
fonte
No meu caso, Python não foi capaz de encontrá-lo porque coloquei o código dentro de um módulo com hifens, por exemplo
my-module
. Quando mudei paramy_module
ele funcionou.fonte
Eu encontrei esse problema. Eu tinha três pastas no mesmo diretório, então tive que especificar qual pasta. Ex: script de importação de pasta
fonte
O seguinte não resolve o problema do OP, mas o título e o erro são exatamente o que eu encontrei.
Se o seu projeto tiver um
setup.py
script, você pode instalar o pacote em que está, compython3 -m pip install -e .
oupython3 setup.py install
oupython3 setup.py develop
, e este pacote será instalado, mas ainda editável (portanto, as alterações no código serão vistas ao importar o pacote). Se não tiver umsetup.py
, faça sentido .De qualquer forma, o problema que o OP enfrenta parece não existir mais?
arquivo
one.py
:def function(): print("output")
arquivo
two.py
:#!/usr/bin/env python3 import one one.function()
chmod +x two.py # To allow execution of the python file ./two.py # Only works if you have a python shebang Command line output: output
Outras soluções parecem 'sujas'
No caso do OP com 2 arquivos de teste, modificá-los para funcionar provavelmente é adequado. No entanto, em outros cenários reais, os métodos listados nas outras respostas provavelmente não são recomendados. Eles exigem que você modifique o código python ou restrinja sua flexibilidade (executando o arquivo python de um diretório específico) e geralmente introduzem aborrecimentos. E se você acabou de clonar um projeto e isso acontece? Provavelmente já funciona para outras pessoas e fazer alterações no código é desnecessário. A resposta escolhida também quer que as pessoas executem um script de uma pasta específica para fazê-lo funcionar. Isso pode ser uma fonte de aborrecimento de longo prazo, o que nunca é bom. Ele também sugere adicionar sua pasta python específica ao PATH (pode ser feito por meio de python ou linha de comando). Novamente, o que acontece se você renomear ou mover a pasta em alguns meses? Você tem que caçar esta página novamente, e, eventualmente, descobrir que você precisa definir o caminho (e que você fez exatamente isso há alguns meses), e que você simplesmente precisa atualizar um caminho (claro, você pode usar sys.path e defini-lo programaticamente, mas isso ainda pode ser instável ) Muitas fontes de grande aborrecimento.
fonte
Se você tiver certeza de que todos os módulos, arquivos que você está tentando importar estão na mesma pasta e devem ser selecionados diretamente apenas fornecendo o nome e não o caminho de referência, então seu editor ou terminal deve ter aberto a pasta principal onde todos os arquivos / módulos estão presentes.
Ou tente executar do Terminal, certifique-se primeiro de ir para o diretório correto.
CD
path to the root folder where all the modules are
Pitão
script.py
Ou se estiver executando [F5] no editor, ou seja, VsCode, abra a pasta completa lá e não os arquivos individuais.
fonte