2017-12-30 57 views
0

ゴールは、モジュール内で、私は、通訳からカスタムモジュールをインポートし、それを実行し、それを修正し、それをリロードし、変更を確認するために、再度それを実行したいと思い

を機能のリロード。

背景

私のpython 2.7を使用しています。私自身のモジュールを書く前に、Python 2.7でreload()関数を大いに利用しました。

は私が呼ばれるフォルダを作成し、簡単な例では

  • を自分の問題を再現:__init__.pyplotme.py

マイ__init__.pyファイル:demo内部demo

  • を、私は2つのファイルを配置します含まれています:

    from .plotme import plot 
    

    マイplotme.pyファイルが含まれています

    import matplotlib.pyplot as plt 
    import numpy as np 
    
    def plot(): 
        x=np.linspace(0,np.pi*4,1000) 
        y=np.cos(x) 
        plt.plot(x,y,'b') 
    

    私はコマンドでそれを実行します。

    >>> import demo 
    >>> demo.plot() 
    

    とそれだけで正常に動作します。

    次に、プロットを青ではなく赤にしたいと決めます。私はplotme.pyで'b''r'に変更して保存します。次に、入力します。

    >>> import(demo) 
    >>> demo.plot() 
    

    プロットはまだ赤ではなく青です。私が望むものではありません。代わりに私は試してみます:

    >>> reload(demo) 
    >>> demo.plot() 
    

    また、色は更新されていません。

    \__init__.pyの内部にリロードコマンドが必要であることがわかりました。

    from .plotme import plot 
    reload(plot) 
    

    とI型:私はそれをアップデートしてみてください

    >>> reload(demo) 
    

    私はエラーを取得する:

    TypeError: reload() argument must be module 
    

    私が代わりにreload(.plotme)をリロードしてみてください。同じエラー。 reload(plotme)を試しても、エラーは発生しませんが、プロットの色は赤に更新されません。

    これを修正するにはどうすればよいですか?

    数行のコードを変更するたびにインタープリタを閉じて再起動する必要はありません。@MoinuddinQuadriの提案で

  • +0

    が、私の質問は、なぜあなたは 'プロット()'関数のパラメータとして色を追加していませんか?あなたが望むものはどこにも渡すことができるのですか? –

    +1

    あなたの問題では、 'reload(...)'の後にモジュールを再度インポートする必要があります。 [python refresh/reload](https://stackoverflow.com/q/1517038/2063361) –

    +0

    を読むこの簡単な例では、私はそれを行うことができます。しかし、私が 'plot()'関数を作図する代わりにテキストを書くようにすると、非常に根本的に異なるものがあります。 – john

    答えて

    1

    は、私が含まれているために、私の__init__.pyファイルを更新:

    from .plotme import plot 
    reload(plot) 
    from .plotme import plot 
    

    をし、それが動作します。私の最終的なアプリケーションには多くの独立した機能が搭載されているので面倒ですが、機能します。ありがとう、MoinuddinQuadri。

    他に提案がありますか?私が20の機能を持っているなら、これを20回書くのはちょっと面倒です。すべての機能をすばやくリロードする方法はありますか?これらの2つのコマンドの後

    reload(demo.plotme) 
    reload(demo) 
    

    、plotmeの変更:

    1

    あなたは(つまり、ファイルdemo/__init__.py) **and** the fileデモ/ plotme.py which is demo.plotme . More precisely, as you importプロットfunction from the plotme sub module, you must import first plotme and then demo`両方demoモジュールをリロードする必要があります考慮されます

    +0

    別の良い解決策、ありがとう!私はこれが確かに私が探しているものに近いと思うが、私が日常的に変更している20のファイルがあるなら、それはまだ厄介なようだ。 – john

    関連する問題