Basicamente, quando eu tenho um arquivo python como:
python-code.py
E use:
import (python-code)
o intérprete me dá erro de sintaxe.
Alguma idéia de como corrigi-lo? Os traços são ilegais nos nomes de arquivos python?
Você deve conferir o PEP 8 , o Guia de Estilo para Código Python:
Nomes de pacotes e módulos Os módulos devem ter nomes curtos e todos em minúsculas. Sublinhados podem ser usados no nome do módulo se melhorar a legibilidade. Os pacotes Python também devem ter nomes curtos, todos em minúsculas, embora o uso de sublinhados seja desencorajado.
Como os nomes dos módulos são mapeados para os nomes de arquivos e alguns sistemas de arquivos não diferenciam maiúsculas de minúsculas e truncam nomes longos, é importante que os nomes dos módulos sejam escolhidos para serem bem curtos - isso não será um problema no Unix, mas pode ser um problema. problema quando o código é transportado para versões mais antigas de Mac ou Windows ou DOS.
Em outras palavras: renomeie seu arquivo :)
ops-scripts
e saber que eles não podem ser importados usando uma abordagem de namespace de pacote normal. Ou um único script pode ser nomeadostop-website.py
para um efeito semelhante. Qualquer um desses ainda pode ser importado viarunpy
e alguns outros métodos, é claro, mas isso ajuda a evitar alguns erros comuns.cgi-bin
pasta (fazendo unitttests neles), o que é bastante comum. A menos que você tenha um caso raro como esse, renomeie seu módulo definitivamente se você tiver controle sobre ele.Outra coisa a ser observada no seu código é que a importação não é uma função. Assim
import(python-code)
deve ser oimport python-code
que, como alguns já mencionaram, é interpretado como "importar python menos código", não o que você pretendia. Se você realmente precisar importar um arquivo com um traço no nome, faça o seguinte:Mas, como também mencionado acima, isso não é realmente recomendado. Você deve alterar o nome do arquivo se for algo que você controla.
fonte
TLDR
Os traços não são ilegais, mas você não deve usá-los por três motivos:
Se você definitivamente precisar importar um nome de arquivo com um traço, a sintaxe especial é esta:
Curioso para saber por que precisamos de sintaxe especial?
O motivo da sintaxe especial é que, ao escrever,
import somename
você cria um objeto de módulo com identificadorsomename
(para que você possa usá-lo posteriormente, por exemplosomename.funcname
). Obviamente,module-name
não é um identificador válido e, portanto, a sintaxe especial que fornece um identificador válido.Você não entende por que module-name não é um identificador válido?
Não se preocupe - eu também não. Aqui vai uma dica para ajudá-lo: Olhe para esta linha python:
x=var1-var2
. Você vê uma subtração no lado direito da atribuição ou um nome de variável com um traço?PS
Nada original na minha resposta, exceto incluindo o que eu considerava as informações mais relevantes de todas as outras respostas em um só lugar
fonte
psycopg2_binary = import_module('psycopg2-binary')
. Erro =>ModuleNotFoundError: No module named 'psycopg2-binary'
. Maspsycopg2-binary
está instalado. Não faço ideia de como incluí-lo.O problema é que
python-code
não é um identificador. O analisador vê isso comopython
menoscode
. Claro que isso não fará o que você está pedindo. Você precisará usar um nome de arquivo que também seja um identificador python válido. Tente substituir o-
por um sublinhado.fonte
Você provavelmente poderia importá-lo através de algum
__import__
hack, mas se você ainda não sabe, não deveria. Os nomes dos módulos do Python devem ser nomes de variáveis válidos ("identificadores") - ou seja, se você tiver um módulofoo_bar
, poderá usá-lo no Python (print foo_bar
). Você não seria capaz de fazê-lo com um nome estranho (print foo-bar
-> erro de sintaxe).fonte
No Python 3, use import_module :
De forma geral,
fonte
Embora a nomeação adequada de arquivos seja o melhor caminho, se
python-code
não estiver sob nosso controle, um uso de hack__import__
é melhor do que copiar, renomear ou mexer com o código de outros autores. No entanto, tentei e não funcionou, a menos que renomeie o arquivo adicionando a.py
extensão. Depois de examinar o documento para obter uma descrição.py
, acabei com o seguinte:Ele criou um novo arquivo
python-codec
na primeira execução.fonte