Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Virtenv e Interpretador existente

Olá,

Ao criar um novo projeto no Pycharm, é possível escolher o interpretador existente e um virtual. Qual seria a diferença entre eles? E quando devo utilizar um ou outro?

3 respostas

Roger,

O python em duas versões a 2.7 e 3.6 que são um pouco diferentes, no curso de Django usamos a 2.7 com a versão do Django 1.7.4, porque na versão atual, 2.0.6 tem vários comandos deprecados.

No python 2.7 vc pode escrever assim:

>>> entrada = raw_input("Digite seu nome: ")
Digite seu nome: Welton
>>> print entrada
Welton
>>>

O mesmo no python3:

>>> entrada = raw_input("Digite seu nome: ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'raw_input' is not defined
>>> entrada = input("Digite seu nome: ")
Digite seu nome: Welton
>>> print entrada
  File "<stdin>", line 1
    print entrada
                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(entrada)?
>>> print(entrada)
Welton
>>>

O primeiro erro "NameError: name 'raw_input' is not defined", não tem a função raw_input no python3, ficou apenas "input"

entrada = input("Digite seu nome: ")

O segundo erro, "print entrada", no Python3 é uma (Print) é função, e não uma instrução:

Diferenças mais impactantes Dito isso, não sei dizer quais são todas essas diferenças, mas dentre as principais segundo a documentação as que considero mais impactantes são as seguintes:

print no 3 é uma função, e não uma instrução:

print 42 # Python 2 print(42) # Python 3

Várias funções built-in e métodos dos principais tipos, que antes retornavam listas, agora retornam iteradores. Isso não é um problema nos usos mais corriqueiros, mas se em algum momento você realmente precisar de uma lista, acostume-se a criar uma explicitamente:

x = list(range(10)) # No Python 2 range já retorna uma lista, você apenas a copia

No Python 3 range retorna um iterador, é preciso criar a lista

for i in range(10): # Igual em ambos (mais eficiente no 3) Strings no 3 são Unicode por padrão, e sequências de bytes devem estar prefixadas por b:

x = "Olá" # No 2, sem o "import unicode_literals", seria inválido

x = u"Olá" # Como era no 2, NÃO RECOMENDADO usar em códigos novos

y = b"\x80" # Só existe a partir do 3; note que 0x80 não é um caractere ASCII válido Inteiro dividido por inteiro é inteiro no 2, mas é ponto flutuante no 3:

x = 3/2 # 1.5 no Python 3, 1 no Python 2 sem o "import division"

y = 3//2 # 1 em ambos ("//" é a divisão inteira)

mais sobre este assunto: https://pt.stackoverflow.com/questions/114088/diferen%C3%A7as-entre-as-vers%C3%B5es-3-x-e-2-7-do-python?rq=1

@weltonvaz, obrigado pelas explicações.

A minha dúvida se refere ao começar um projeto no Pycharm, onde é possível escolher um ambiente virtual e o interpretador que já está na pasta C:\python3.

solução!

Roger,

Vc abre ou cria um projeto novo no Pycharm em baixo no console do Pycharm, Vc cria com o virtualenv o seu ambiente de desenvolvimento. Ou ainda pode usar, onde aprendi: https://youtu.be/SeyoRF1hu54