2016-01-30 22 views
11

~/.bashrcに慣れていない人は、UnixシェルBashのために存在するカスタマイズ可能なスクリプトです。新しいターミナルセッションが開始されると、このユーザー固有のファイルが実行されます。ユーザーはこのファイルの共通変数、関数、および環境設定をスクリプト化して、ターミナルウィンドウを開くたびに自動的にロードされるようにすることができます。〜/ .bashrcに相当するPython

Pythonに類似したものはありますか?基本的には、スクリプト内にいくつかのグローバルPython関数を定義し、マシン上でPythonスクリプトを実行するたびに、またはPythonターミナルを起動するたびにそれらがロードされるようにしたいと思います。この動作が既に存在するのか、それを実装するための簡単な方法があるのだろうかと思います。

+0

['__init __。py'](http://stackoverflow.com/questions/448271/what-is-init-py-for)を参照してください。 – e0k

+3

Pythonスクリプトごとに実行することはサポートされていません( '__init __。py'は、パッケージやその子をインポートしたときに特定のコードが実行されるようにするために使用できます)が、インタラクティブなインタプリタをカスタマイズするには' PYTHONSTARTUP'環境変数は、インタラクティブなインタプリタに渡す前に実行するPythonコマンドでファイルを指すようにします。 'export PYTHONSTARTUP = $ HOME/.pythonrc'です。 – ShadowRanger

+1

https://docs.python.org/2/library/site.html –

答えて

5

は良いアイデアではありません。 Zen of Python

名前空間はすばらしいアイデアです。それらの詳細をお試しください!言っ

__init__.pyはパッケージまたはその子がインポートされている場合に実行される特定のコードを確実にするために使用され、インタラクティブなインタプリタをカスタマイズするため、Pythonが実行するコマンドでファイルを指すようにPYTHONSTARTUP環境変数を設定することができますインタラクティブなインタプリタに渡す前に、例えばexport PYTHONSTARTUP=$HOME/.pythonrc

PYTHON3STARTUPが存在しないため、PYTHONSTARTUPファイルにPy2とPy3の両方の有効な構文が含まれていることを確認してください。両方のバージョンのPythonで実行されます。

5

これは良い考えではありません。本当に。ネームスペースの汚染は深刻な問題であり、自分のマシンや他の場所でしか動作しないコードを書くことによって誰も好意を払わず、モジュールでコードをパッケージ化すれば、適切にパブリッシュして配布することができます。しかし

、あなたが主張する場合は、the site moduleを見て、そのユーザー・カスタマイズの行動の特定:この後

は、試みは、任意のユーザー固有のカスタマイズを行うことができusercustomizeという名前のモジュールをインポートするためになされたものであり、 ENABLE_USER_SITEがtrueの場合このファイルは、-sによって無効にされていない限り、sys.pathの一部であるuser site-packagesディレクトリ(下記参照)に作成されます。 ImportErrorは暗黙のうちに無視されます。

このように、心臓のコンテンツにホットパッチするusercustomizeモジュールを作成することができます。そのようなホットパッチの一例として、


:それは名前空間を壊すので、すべてのPythonスクリプトのために実行

def myfunc(): 
    print 'hello' 

main_ns = __import__('__main__') 
main_ns.myfunc = myfunc 
+0

um!いくつかのバッチコマンドのようなシステム固有の機能がいくつかありますが、それでもまだ悪いですか? – Ja8zyjits

+0

ショートフォーム:はい、悪いです。 "Explicitは暗黙より優れています"はPythonの方法の一部です - ローカルのものを使用している場合は、すべての名前空間に暗黙のうちに存在するのではなく、明示的に指定する必要があります。 –

+1

...ローカルシェルの拡張機能だけが必要な場合は、おそらくIPythonとその拡張メカニズムを使用しますか?そうすれば、少なくともスクリプトの動作に干渉することはありません。 http://ipython.readthedocs.org/en/stable/config/extensions/index.html –

4

基本的に私は、スクリプト内でグローバルPython関数の一握りを定義し、私は私の マシン上でPythonスクリプトを実行するたびに、それらがロードされていることを確認したい、または私はPythonのターミナルを起動するたび

あなたの2番目の選択肢についてお話しましょう。端末の起動時に関数と変数をロードする方法があります。私は、デフォルトのPythonターミナルの代わりにIPythonを使用することをお勧めします。ただし、IPythonをインストールせずにこれを行うには、環境変数を変更してください。 PYTHONSTARTUP.設定ファイルをコンパイルする機能がなくなります。

IPythonをインストールしたら、設定ファイルを初期化する必要があります。 は、デフォルトのプロファイルを作成するには:

ipython profile create 

は、他の回答に共通の話題に対処するために、グローバル変数と関数は、暗黙的に定義されている場合は特に悪い考えです。しかし、ipythonの起動時に別々の設定ファイルを定義して読み込むことができます。設定ファイルを変更するために今すぐ

ipython --profile=<name> 

<name>プロファイルをロードするには

ipython profile create <name> 

:ようなプロファイルを作成するには 。このコマンドを実行して、それらの位置を確認します。

ipython locate profile 

ipython_config.pyが見つかります。私はそれを読むことをお勧めします、それは非常に有用なコメントを持っています。

しかしipythonを開始する際のポイントを取得するには、設定ファイルに以下の行を追加することで、任意の関数や変数をロードすることができます

c.InteractiveShellApp.exec_lines = [ "def p(s): print s" ] 
c.InteractiveShellApp.exec_files = [ "/path/of/script.py" ] 

私はthe IPython docsipython_config.pyのコメントを参照しています:

96 # List of files to run at IPython startup.          
97 # c.TerminalIPythonApp.exec_files = []           
98                     
99 # lines of code to run at IPython startup.          
100 # c.TerminalIPythonApp.exec_lines = [] 
関連する問題