Reloading a changed python file in emacs python shell

后端 未结 3 1832
长情又很酷
长情又很酷 2021-01-02 16:19

In the emacs Python shell (I\'m running 2.* Python) I am importing a .py file I\'m working with and testing the code. If I change the code however I\'m not sure how to impor

相关标签:
3条回答
  • 2021-01-02 17:03

    It seems to work for me:

    Make a file (in your PYTHONPATH) called test.py

    def foo():
        print('bar')
    

    Then in the emacs python shell (or better yet, the ipython shell), type

    >>> import test
    >>> test.foo()
    bar
    

    Now modify test.py:

    def foo():
        print('baz')
    
    >>> reload(test)
    <module 'test' from '/home/unutbu/pybin/test.py'>
    >>> test.foo()
    baz
    
    0 讨论(0)
  • 2021-01-02 17:07

    While reload() does work, it doesn't change references to classes, functions, and other objects, so it's easy to see an old version. A most consistent solution is to replace reload() with either exec (which means not using import in the first place) or restarting the interpreter entirely.

    If you do want to continue to use reload, be very careful about how you reference things from that module, and always use the full name. E.g. import module and use module.name instead of from module import name. And, even being careful, you will still run into problems with old objects, which is one reason reload() isn't in 3.x.

    0 讨论(0)
  • 2021-01-02 17:18

    After looking at this issue for quite an extensive amount of time, I came to the conclusion that the best solution to implement is, either based on an initialisation file of your python interpreter (ipython for exemple), or using the python build-in module "imp" and its function "reload". For instance at the beginning of your code:

    import my_module
    import imp
    imp.reload(my_module)
    
    #your code
    

    This solution came to me from this page: https://emacs.stackexchange.com/questions/13476/how-to-force-a-python-shell-to-re-import-modules-when-running-a-buffer

    0 讨论(0)
提交回复
热议问题