Estou executando o PyLint de dentro do Wing IDE no Windows. Eu tenho um subdiretório (pacote) no meu projeto e dentro do pacote eu importo um módulo do nível superior, ou seja.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Por dentro two.py
eu tenho import one
e isso funciona bem em tempo de execução, porque o diretório de nível superior (a partir do qual myapp.py
é executado) está no caminho do Python. No entanto, quando executo o PyLint no two.py, ocorre um erro:
F0401: Unable to import 'one'
Como faço para corrigir isso?
~/.pylintrc
trabalhou para mim em OSX, o outro não funcionouexport PYTHONPATH
para quepylint
vai vê-lo (pelo menos, em bash / zsh)A solução para alterar o caminho
init-hook
é boa, mas eu não gosto do fato de ter que adicionar um caminho absoluto, pois não posso compartilhar esse arquivo pylintrc entre os desenvolvedores do projeto. Esta solução usando o caminho relativo para o arquivo pylintrc funciona melhor para mim:Observe que
pylint.config.PYLINTRC
também existe e tem o mesmo valor quefind_pylintrc()
.fonte
.
(ponto).app
), você pode usarfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path é uma lista.
2) Às vezes, o problema é que o sys.path não é o seu virtualenv.path e você deseja usar o pylint no seu virtualenv
3) Assim como dito, use init-hook (preste atenção em 'e "a análise de pylint é estrita)
ou
.. e
fonte
pylint
em meu virtualenv como por este conselho: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
na sua pasta pessoal.O problema pode ser resolvido configurando o caminho do pylint em venv: $ cat .vscode / settings.json
fonte
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
apenas uma questão de integridade.The setting "python.pythonPath" defined in your settings.json is now deprecated.
Se eu excluir apython.pythonPath
linha, ela ainda parece funcionar.Você tem um
__init__.py
arquivo vazio nos dois diretórios para informar ao python que os diretórios são módulos?O esquema básico quando você não está executando a partir da pasta (ou seja, talvez do pylint, embora eu não tenha usado isso) é:
É assim que o interpretador python conhece o módulo sem referência ao diretório atual; portanto, se o pylint estiver sendo executado a partir de seu próprio caminho absoluto, ele poderá acessar
functions_etc.py
comotopdir.functions_etc
outopdir.subdir.other_functions
, desde quetopdir
esteja noPYTHONPATH
.ATUALIZAÇÃO: Se o problema não for o
__init__.py
arquivo, talvez apenas tente copiar ou mover seu módulo parac:\Python26\Lib\site-packages
- esse é um local comum para colocar pacotes adicionais e definitivamente estará no seu pythonpath. Se você sabe como fazer links simbólicos do Windows ou o equivalente (não sei!), Você pode fazer isso. Há muito mais opções aqui: http://docs.python.org/install/index.html , incluindo a opção de anexar sys.path ao diretório de código de desenvolvimento no nível do usuário, mas, na prática, eu normalmente apenas simbolicamente vinculo meu diretório de desenvolvimento local para pacotes de sites - copiá-lo tem o mesmo efeito.fonte
__init__.py
nos dois diretórios. Eu acho que o problema é que o diretório superior NÃO está no PYTHONPATH quando o PyLint é executado e não tenho certeza de como consertar isso.resposta geral para esta pergunta que encontrei nesta página POR FAVOR, NÃO ABRA, O SITE ESTÁ ERRADO
criar
.pylintrc
e adicionarfonte
Não sei como ele funciona com o WingIDE, mas, para usar o PyLint com o Geany, defino meu comando externo para:
onde% f é o nome do arquivo e% d é o caminho. Pode ser útil para alguém :)
fonte
Eu tive que atualizar a
PYTHONPATH
variável do sistema para adicionar meu caminho do App Engine. No meu caso, eu apenas tive que editar meu~/.bashrc
arquivo e adicionar a seguinte linha:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
Na verdade, tentei definir o
init-hook
primeiro, mas isso não resolveu o problema de maneira consistente em toda a minha base de código (não sei por que). Depois que o adicionei ao caminho do sistema (provavelmente uma boa ideia em geral), meus problemas desapareceram.fonte
Uma solução alternativa que eu acabei de descobrir é realmente executar o PyLint para todo o pacote, em vez de um único arquivo. De alguma forma, ele consegue encontrar o módulo importado.
fonte
pylint ... dir
da pasta pai. Isso requer__init__.py
a presença em cada subpasta com.py
arquivos.ExperimentarObserve que no Python 3, a sintaxe da parte da
else
cláusula seriaPensando bem, isso provavelmente não resolverá seu problema específico. Entendi mal a pergunta e pensei que o two.py estava sendo executado como o módulo principal, mas esse não é o caso. E considerando as diferenças na maneira como o Python 2.6 (sem importar
absolute_import
do__future__
) e o Python 3.x manipulam as importações, você não precisaria fazer isso no Python 2.6 de qualquer maneira, não acho.Ainda assim, se você mudar para o Python 3 e planejar usar um módulo como um módulo de pacote e como um script independente dentro do pacote, pode ser uma boa ideia manter algo como
em mente.
EDIT: E agora para uma possível solução para o seu problema real. Execute o PyLint a partir do diretório que contém seu
one
módulo (via linha de comando, talvez) ou coloque o seguinte código em algum lugar ao executar o PyLint:Basicamente, como uma alternativa para mexer com PYTHONPATH, verifique se o diretório de trabalho atual é o diretório que contém
one.py
quando você faz a importação.(Olhando para a resposta de Brian, você provavelmente poderia atribuir o código anterior
init_hook
, mas se você quiser fazer isso, basta fazer o anexo aosys.path
que ele faz, o que é um pouco mais elegante que a minha solução.)fonte
A chave é adicionar o diretório do projeto
sys.path
sem considerar a variável env.Para alguém que usa o VSCode, aqui está uma solução de uma linha para você, se houver um diretório base do seu projeto:
Deixe-me explicar um pouco:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: encontre o diretório base de acordo com o arquivo de ediçãoos.path.join(os.getcwd(), base_dir)
: adicionecwd
parasys.path
atender ao ambiente da linha de comandosFYI, aqui está o meu .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
fonte
Eu tive esse mesmo problema e o corrigi instalando o pylint no meu virtualenv e adicionando um arquivo .pylintrc ao diretório do meu projeto, com o seguinte no arquivo:
fonte
Talvez anexando manualmente o diretório dentro do PYTHONPATH?
fonte
Eu tive o mesmo problema e, como não consegui encontrar uma resposta, espero que isso possa ajudar alguém com um problema semelhante.
Eu uso flymake com epylint. Basicamente, o que fiz foi adicionar um gancho no modo dired que verifique se o diretório dired é um diretório de pacote python. Se for, eu o adiciono ao PYTHONPATH. No meu caso, considero um diretório um pacote python se ele contiver um arquivo chamado "setup.py".
Espero que isto ajude.
fonte
Caso alguém esteja procurando uma maneira de executar o pylint como uma ferramenta externa no PyCharm e fazê-lo funcionar com seus ambientes virtuais (por que vim a essa pergunta), veja como eu o resolvi:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Agora, usar o pylint como uma ferramenta externa executará o pylint em qualquer diretório que você selecionou, usando um arquivo de configuração comum e usará qualquer intérprete configurado para o seu projeto (que provavelmente é seu intérprete virtualenv).
fonte
Esta é uma pergunta antiga, mas não tem resposta aceita, por isso vou sugerir o seguinte: altere a declaração de importação em two.py para ler:
No meu ambiente atual (Python 3.6, VSCode usando pylint 2.3.1), isso limpa a instrução sinalizada.
fonte
Encontrei uma boa resposta . Edite seu pylintrc e adicione o seguinte no master
fonte
Ao instalar o Python, você pode configurar o caminho. Se o caminho já estiver definido, o que você pode fazer é no VS Code, pressione Ctrl + Shift + P e digite Python: Select Interpreter e selecione a versão atualizada do Python. Siga este link para obter mais informações, https://code.visualstudio.com/docs/python/environments
fonte
se você estiver usando vscode, verifique se o diretório do pacote está fora do diretório _pychache__.
fonte
Se você estiver usando o Cython no Linux, resolvi remover
module.cpython-XXm-X-linux-gnu.so
arquivos no diretório de destino do projeto.fonte
basta adicionar esse código no arquivo .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Isso notificará a localização do pylint (que é um verificador de erros para python)
fonte
Olá, eu era capaz de importar os pacotes de diretório diferente. Eu fiz o seguinte: Nota: estou usando o VScode
Etapas para criar um pacote Python Trabalhar com pacotes Python é realmente simples. Tudo que você precisa fazer é:
Crie um diretório e atribua a ele o nome do seu pacote. Coloque suas aulas nele. Crie um arquivo .py init no diretório
Por exemplo: você tem uma pasta chamada Framework, na qual mantém todas as classes personalizadas, e seu trabalho é apenas criar um arquivo .py init dentro da pasta denominada Framework.
E durante a importação, você precisa importar dessa maneira --->
da base de importação do Framework
Portanto, o erro E0401 desaparece. Framework é a pasta onde você acabou de criar init .py e base é o seu módulo personalizado, para o qual você precisa importar e trabalhar. Espero que ajude !!!!
fonte