相关疑难解决方法(0)

如何卸载(重新加载)Python模块?

我有一个长期运行的Python服务器,并希望能够在不重新启动服务器的情况下升级服务.这样做的最佳方法是什么?

if foo.py has changed:
    unimport foo  <-- How do I do this?
    import foo
    myfoo = foo.Foo()
Run Code Online (Sandbox Code Playgroud)

python module reload python-import

759
推荐指数
15
解决办法
59万
查看次数

如何将"重新导入"模块转换为python,然后在导入后更改代码

我有一个 foo.py

def foo():
    print "test"
Run Code Online (Sandbox Code Playgroud)

在IPython中我使用:

In [6]:  import foo
In [7]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

然后我改为foo():

def foo():
    print "test changed"
Run Code Online (Sandbox Code Playgroud)

在IPython中,调用的结果仍然是test:

In [10]:  import foo
In [11]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

然后我用:

In [15]: del foo
In [16]:  import foo
In [17]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

我删除了foo.pyc相同的文件夹foo.py存在,但仍然没有运气.

我可以知道如何在运行时重新导入更新的代码吗?

python overloading runtime ipython python-import

73
推荐指数
4
解决办法
5万
查看次数

Python:预加载内存

我有一个 python 程序,我需要在其中加载和反序列化 1GB 的 pickle 文件。这需要 20 秒,我想要一种机制,可以随时使用泡菜的内容。我看过shared_memory但它的所有使用示例似乎都涉及 numpy 而我的项目不使用 numpy。使用shared_memory或以其他方式实现这一目标的最简单和最干净的方法是什么?

这就是我现在加载数据的方式(每次运行):

def load_pickle(pickle_name):
    return pickle.load(open(DATA_ROOT + pickle_name, 'rb'))
Run Code Online (Sandbox Code Playgroud)

我希望能够在两次运行之间编辑模拟代码而无需重新加载泡菜。我一直在搞乱,importlib.reload但对于包含许多文件的大型 Python 程序来说,它似乎真的不太好用:

def main():
    data_manager.load_data()
    run_simulation()
    while True:
        try:
            importlib.reload(simulation)
            run_simulation()
        except:
        print(traceback.format_exc())
        print('Press enter to re-run main.py, CTRL-C to exit')
        sys.stdin.readline()
Run Code Online (Sandbox Code Playgroud)

python shared-memory

26
推荐指数
2
解决办法
707
查看次数

在导入模块之前进行模拟

如何在此测试模块(MUT)中进行修补和模拟 getLogger:

# Start of the module under test
import logging
log = logging.getLogger('some_logger')
# ...
Run Code Online (Sandbox Code Playgroud)

我想要做:

mock_logging.getLogger.return_value = Mock()
Run Code Online (Sandbox Code Playgroud)

但是我mock_logging在导入MUT之前无法创建,但是导入MUT已经调用了getLogger...

python logging patch mocking

6
推荐指数
2
解决办法
2855
查看次数

在 Jupyter 笔记本中重新加载 Python 模块(不带自动重新加载)

我有以下文件夹结构

project/
  src/
    __init__.py
    mymodule.py
  mynotebook.ipynb
Run Code Online (Sandbox Code Playgroud)

mynotebook我可以mymodule使用标准公式导入from src.mymodule import *。在mymodule不停止内核的情况下修改并尝试重新导入它时会弹出问题。我正在关注讨论,但它不起作用。(蟒蛇版本:3.3.5)

from imp import reload 
reload(src.mymodule) # also reload(mymodule)
Run Code Online (Sandbox Code Playgroud)

上面的代码失败并显示消息name 'src' is not defined(也name 'mymodule' is not defined)。我不能使用ipython'sautoreload因为我没有安装它的权限。

谢谢!

python jupyter-notebook

4
推荐指数
1
解决办法
3096
查看次数