Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何开发Python模块/包而不必在每次更改后重新启动解释器?_Python_Module_Packages - Fatal编程技术网

如何开发Python模块/包而不必在每次更改后重新启动解释器?

如何开发Python模块/包而不必在每次更改后重新启动解释器?,python,module,packages,Python,Module,Packages,我正在使用文本编辑器和IPython开发一个Python包。每次更改任何模块代码时,我都必须重新启动解释器来测试它。这是一种痛苦,因为我正在开发的类依赖于需要在每次重新加载时重新建立的上下文 我知道reload()函数,但这似乎是(也是因为它已从Python 3.0中的内置功能降级),而且它很少工作,因为模块几乎总是有多个引用 我的问题是-开发Python模块/包的最佳/公认方法是什么,这样我就不必经历不断重新建立解释器上下文的痛苦 我曾经想到的一个想法是使用if uuuuu name uuuu

我正在使用文本编辑器和IPython开发一个Python包。每次更改任何模块代码时,我都必须重新启动解释器来测试它。这是一种痛苦,因为我正在开发的类依赖于需要在每次重新加载时重新建立的上下文

我知道
reload()
函数,但这似乎是(也是因为它已从Python 3.0中的内置功能降级),而且它很少工作,因为模块几乎总是有多个引用

我的问题是-开发Python模块/包的最佳/公认方法是什么,这样我就不必经历不断重新建立解释器上下文的痛苦

我曾经想到的一个想法是使用
if uuuuu name uuuu=='\uuuuu main uuuu':
技巧直接运行模块,这样代码就不会被导入。然而,这在我的模块文件的底部留下了一堆上下文错误(特定于我的设置)


想法?

Ipython确实允许重新加载查看神奇的函数%run

或者如果该函数下的模块更改了递归dreloadd()函数


如果您有一个复杂的上下文,是否可以在另一个模块中创建它?或者将其分配给一个全局变量,该变量将在解释器未重新启动时保留

您可以创建一个python脚本,用于设置上下文并使用

python -i context-setup.py


   -i     When  a  script  is passed as first argument or the -c option is
          used, enter interactive mode after executing the script  or  the
          command.  It does not read the $PYTHONSTARTUP file.  This can be
          useful to inspect global variables  or  a  stack  trace  when  a
          script raises an exception.

另一种方法可能是将测试驱动开发形式化,而不是使用解释器来测试模块,而是保存测试并直接运行它们

您可能知道使用python执行此操作的各种方法,我想从这个方向开始最简单的方法是将您在解释器中执行的操作作为doctest复制并粘贴到docstring中,并将以下内容添加到模块底部:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

然后,每次直接调用模块时,都会重复非正式测试。这还有许多其他好处。有关编写doctest的更多信息,请参阅。

在每次将编辑保存到磁盘时,使用with在单独的终端中自动运行测试如何?设置单元测试中所需的所有状态。

dreload()的
dreload()听起来也不错,但它似乎遇到了Numpy的问题-它似乎也忽略了我在
排除
关键字列表中设置的任何内容…Numpy和
dreload()的问题
在这里有文档记录。使用自动测试(例如,使用py.test或unittest模块)来驱动开发的建议应该是+10,但我只能给出一个:(这也是一个好主意。然而,在这些早期阶段,API正在迅速变化。这是我将在以后的软件包开发中通常包括的内容。