Importe módulos automaticamente ao inserir o interpretador python ou ipython


119

Eu me pego digitando import numpy as npquase todas as vezes que ligo o interpretador python. Como configuro o interpretador python ou ipython para que numpy seja importado automaticamente?

Respostas:


70

Use a variável de ambiente PYTHONSTARTUP . Da documentação oficial:

Se este for o nome de um arquivo legível, os comandos Python nesse arquivo serão executados antes do primeiro prompt ser exibido no modo interativo. O arquivo é executado no mesmo namespace onde os comandos interativos são executados para que os objetos definidos ou importados nele possam ser usados ​​sem qualificação na sessão interativa.

Portanto, basta criar um script Python com a instrução import e apontar a variável de ambiente para ele. Dito isso, lembre-se de que 'Explícito é sempre melhor do que implícito', portanto, não dependa desse comportamento para scripts de produção.

Para Ipython, veja este tutorial sobre como fazer um arquivo ipython_config


@mklauber, obrigado, mas a solução aceita está obsoleta. No entanto, inspirou minha edição. @ OP: Veja minha resposta editada
Dhara

3
@ user545424 até o momento (ipython 1.1.0) também oferece suporte a PYTHONSTARTUP.
pflaquerre

A configuração env PYTHONSTARTUP="~/.startup.py"não funcionou para mim
Seanny123

Apenas uma nota export PYTHONSTARTUP=~/.python_shell_startup.pypara definir a variável.
PallavBakshi

77

Para ipython, existem duas maneiras de fazer isso. Ambos envolvem o diretório de configuração do ipython que está localizado em ~/.ipython.

  1. Crie um perfil ipython personalizado.
  2. Ou você pode adicionar um arquivo de inicialização para ~/.ipython/profile_default/startup/

Para simplificar, eu usaria a opção 2. Tudo que você precisa fazer é colocar um arquivo .pyou .ipyno ~/.ipython/profile_default/startupdiretório e ele será executado automaticamente. Assim, você pode colocar import numpy as npem um arquivo simples e terá np no namespace do prompt do ipython.

A opção 2 realmente funcionará com um perfil personalizado, mas o uso de um perfil personalizado permitirá que você altere os requisitos de inicialização e outras configurações com base em um caso específico. No entanto, se você sempre como npestar disponível para você, então por todos os meios colocá-lo no diretório de inicialização.

Para obter mais informações sobre a configuração do ipython. Os documentos têm uma explicação muito mais completa.


2
No Ubuntu 14.04, o diretório é: ~/.config/ipython/profile_default/startup/e não~/.ipython/profile_default/startup/
Peter

1
Infelizmente, a opção 2 acima não permite o preenchimento de tabulação.
user1717828

21

Eu uso um arquivo ~ / .startup.py como este:

# Ned's .startup.py file
print("(.startup.py)")
import datetime, os, pprint, re, sys, time
print("(imported datetime, os, pprint, re, sys, time)")

pp = pprint.pprint

Em seguida, defina PYTHONSTARTUP = ~ / .startup.py e o Python o usará ao iniciar um shell.

As instruções de impressão estão lá, portanto, quando eu inicio o shell, recebo um lembrete de que ele está em vigor e do que já foi importado. O ppatalho também é muito útil ...


Não funcionou para mim no Linux. Devo dizer ao Python para procurar em meu diretório inicial ou algo assim?
Seanny123

oops: esqueci uma etapa importante: eu adicionei: defina PYTHONSTARTUP
Ned Batchelder

Eu nunca sei quando o ~como um substituto para $HOMEfunciona ou não, mas em vez desse caminho relativo eu tive que usar um caminho absoluto no MacOS, fish e python3.
rien333

@Ned Batchelder, muito obrigado, é isso que eu estava procurando. questão lateral, estou usando isso no windows e o atalho pp não está funcionando. Você poderia nos aconselhar? >>> pp <function pprint em 0x0000020DAF90C8C8> >>> pp () Traceback (última chamada mais recente): Arquivo "<stdin>", linha 1, em <module> TypeError: pprint () ausente 1 argumento posicional necessário: 'objeto' >>>
Forever Learner

5

Embora a criação de um script de inicialização personalizado como ravenac95 sugira que seja a melhor resposta geral para a maioria dos casos, não funcionará nas circunstâncias em que você deseja usar um from __future__ import X. Se você às vezes trabalha com Python 2.x, mas deseja usar a divisão moderna, só há uma maneira de fazer isso. Depois de criar um perfil, edite o profile_default(no Ubuntu, está localizado em ~/.ipython/profile_default) e adicione algo como o seguinte na parte inferior:

c.InteractiveShellApp.exec_lines = [
    'from __future__ import division, print_function',
    'import numpy as np',
    'import matplotlib.pyplot as plt',
    ]

3

Como uma alternativa mais simples para a resposta aceita, no linux:

apenas defina um alias, por exemplo, coloque alias pynp='python -i -c"import numpy as np"'em seu arquivo ~ / .bash_aliases. Você pode então invocar python + numpy com pynp, e ainda pode usar apenas python com python. O comportamento dos scripts Python não é alterado.


PYTHONSTARTUPsó é invocado no modo interativo , então o comportamento dos scripts python é mantido inalterado de qualquer maneira. Um alias também pode ser criado com uma referência de arquivo:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

Você pode criar um script python normal como import_numpy.pyou qualquer coisa que desejar

#!/bin/env python3
import numpy as np

em seguida, lance-o com a -ibandeira.

python -i import_numpy.py

Assim, você terá flexibilidade para escolher apenas os módulos desejados para diferentes projetos.


1

Como ravenac95 mencionou em sua resposta , você pode criar um perfil personalizado ou modificar o perfil padrão. Esta resposta é uma visão rápida dos comandos do Linux necessários para import numpy as npautomaticamente.

Se você quiser usar um perfil personalizado chamado numpy, execute:

ipython profile create numpy
echo 'import numpy as np' >> $(ipython locate profile numpy)/startup/00_imports.py
ipython --profile=numpy

Ou se você deseja modificar o perfil padrão para sempre importar numpy:

echo 'import numpy as np' >> $(ipython locate profile default)/startup/00_imports.py
ipython

Confira o tutorial de configuração do IPython para ler mais a fundo sobre a configuração de perfis. Veja .ipython/profile_default/startup/READMEpara entender como funciona o diretório de inicialização.


1

Minha ipythoninvocação padrão é

ipython --pylab --nosep --InteractiveShellApp.pylab_import_all=False

--pylabtem sido uma ipythonopção há algum tempo. Importa numpye (partes de) matplotlib. Adicionei a --Inter...opção para não usar a *importação, pois prefiro usar a explícita np.....

Pode ser um atalho, apelido ou script.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.