相关疑难解决方法(0)

在IPython中自动加载模块

有没有办法让IPython自动重新加载所有更改的代码?在每个行在shell中执行之前,或者在特别请求它时失败.我正在使用IPython和SciPy进行大量的探索性编程,每当我更改它时,必须手动重新加载每个模块是非常痛苦的.

python ipython jupyter-notebook

153
推荐指数
4
解决办法
10万
查看次数

列出属于python包的所有模块?

有没有一种直接的方法来查找属于python包的所有模块?我发现这个旧的讨论并不是真正的结论,但在推出基于os.listdir()的自己的解决方案之前,我希望得到明确的答案.

python module packages introspection python-import

96
推荐指数
2
解决办法
7万
查看次数

如何通过"manage.py shell"使用交互式解释器重新加载Django模型模块?

我知道如何在常规Python解释器会话中重新加载常规Python模块.这个问题记录了如何做得很好:

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

出于某种原因,我在Django的"manage.py shell"解释器会话中遇到了麻烦.要重新创建我的问题,请启动此处的基本Django教程:

编写你的第一个Django应用程序,第1部分

创建"民意调查"应用程序和"民意调查"类后,通过"manage.py shell"启动解释器并将"民意调查"应用程序导入其中.

import polls.models as pm
Run Code Online (Sandbox Code Playgroud)

创建一个新的"民意调查"对象:

p = pm.Poll()
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利.现在回到您的源代码并添加任意方法或属性.例如,我添加了:

def x(self):
    return 2+2
Run Code Online (Sandbox Code Playgroud)

现在回到解释器并"重新加载"模块:

reload(pm)
Run Code Online (Sandbox Code Playgroud)

现在尝试使用您的新方法或属性:

p1 = pm.Poll()
p1.x()
Run Code Online (Sandbox Code Playgroud)

你会收到这条消息:

'Poll' object has no attribute 'x'
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我还尝试重新运行import命令,使用不同的语法导入模块,删除对任何"Poll"对象或"Poll"类的所有引用.我也尝试过使用IPython解释器和普通的Python(v2.6)解释器.似乎没什么用.

在常规解释器会话中使用与任意Python模块相同的技术可以很好地工作.我似乎无法让它在Django的"shell"会话中工作.

顺便说一句,如果它有任何区别,我在Ubuntu 9.04机器上这样做.

python django

53
推荐指数
5
解决办法
2万
查看次数

重用来自不同IPython笔记本的代码

我正在使用IPython,并希望从另一个笔记本中运行功能(不需要在不同的笔记本之间剪切和粘贴).这可能并且相当容易吗?

python ipython ipython-notebook

45
推荐指数
4
解决办法
2万
查看次数

如何在ipython中重新加载我的命名空间中的对象

在将函数导入ipython之后,当我在ipython之外修改它们时,如何重新加载它们?

python ipython

24
推荐指数
2
解决办法
2万
查看次数

从IPython重新加载Python扩展模块

使用Cython,我正在开发一个扩展模块,它将构建为.so文件.然后我使用IPython测试它.在开发过程中,我经常需要进行更改和重建.我还需要退出IPython shell并重新输入所有命令.重新导入模块

import imp
imp.reload(Extension)
Run Code Online (Sandbox Code Playgroud)

不起作用,代码不更新.有没有办法让我在重建模块后避免重启IPython shell?

python ipython cython python-3.x

21
推荐指数
1
解决办法
3632
查看次数

用Python 3.4重新加载模块

我知道这可能听起来像一个非常愚蠢的问题,但无论如何.我在Python中创建了一个小脚本,我在shell中做了一些更改.通常,在OS X计算机上(它正在运行Python 2.7),我只需输入reload(the_module)并重新加载包含我所做更改的模块.但是,当我在这里重新加载模块时(在windows python v.3.4上),它只是给了我这个:

>>> reload(instfile)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    reload(instfile)
NameError: name 'reload' is not defined
Run Code Online (Sandbox Code Playgroud)

然后当我输入时imp.reload(my_module),它只是说该函数已被弃用.我似乎无法找到新功能(或它的等效物)将在任何地方,所以如果有人可以帮助我,这将是伟大的!:)

python python-module python-3.x python-3.4

19
推荐指数
1
解决办法
3万
查看次数

IPython自动加载子目录中的更改

我从主文件夹启动IPython /project.现在,如果我在文件中进行更改/project/tests/some_module.py,则无法在IPython中自动重载更改.另外,在保存更改并希望在提示符中运行其他脚本后,我收到以下消息:

[autoreload of some_module failed: Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/IPython/extensions/autoreload.py", line 229, in check
    superreload(m, reload, self.old_objects)
ImportError: No module named some_module]
Run Code Online (Sandbox Code Playgroud)

它似乎检测到文件夹内的更改,/tests但无法导入它.有人可以帮我弄这个吗?

编辑: 为了更好地说明:我从主文件夹中的终端启动IPython.在这个文件夹中,我有另一个文件夹tests.里面tests我有两个python文件:

some_module.py:

def hello_world():
  print "Hello World!!!"
Run Code Online (Sandbox Code Playgroud)

use_some_module.py:

from some_module import hello_world

hello_world()
Run Code Online (Sandbox Code Playgroud)

一旦我启动IPython,some_module.py中的进一步更改将不会在IPython中加载.例如,如果我print "Hello Earth!!!"在定义hello_world()和运行中添加第二个run tests/use_some_module.py,我会收到上面显示的错误消息,并且只会获得"Hello World!!!"打印.

Edit2:我想要一个解决方案,我不需要更改工作目录,也不需要手动添加任何搜索路径.我想让它自动加载自动加载.

python ipython

13
推荐指数
1
解决办法
1173
查看次数

更改后如何重新加载模块?

Python 3.4.2的Python控制台

我在PyCharm Community Edition 4.5.4中的Python控制台中正确运行的模块中定义了一个函数:
ReloadTest.py:

def reloadtest(x):
    print("Version A: {}".format(x))
Run Code Online (Sandbox Code Playgroud)

Python控制台:

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1   
Run Code Online (Sandbox Code Playgroud)

在我将函数修改为"版本B"后,PyCharm无法找到更改,并importlib.reload(ReloadTest)给出了错误.
我每次修改模块时都必须重新加载Python控制台或重启PyCharm.我做错了什么?处理这个问题的最佳方法是什么?

ReloadTest.py:

def reloadtest(x):
    print("Version B: {}".format(x))
Run Code Online (Sandbox Code Playgroud)

Python控制台:

>>> reloadtest(1)
Version A: 1
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1
>>> import importlib
>>> importlib.reload(ReloadTest)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: …
Run Code Online (Sandbox Code Playgroud)

pycharm

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

Python:通过多个文件定义模块

假设我有一个名为的python模块mymodule.在我的代码的顶部,我有这个:

import mymodule
reload(mymodule)
Run Code Online (Sandbox Code Playgroud)

我的目录结构在哪里

/dir/mymodule.py
Run Code Online (Sandbox Code Playgroud)

但是,我想mymodule.py分成几个文件,同时仍然被定义为单个模块(即我不想单独导入每个文件 - 我希望能够像以前一样使用我的导入/重新加载).

我知道如何做到这一点的唯一方法如下

/dir/mymodule/
             file1.py
             file2.py
             __init__.py
Run Code Online (Sandbox Code Playgroud)

哪里__init__.py包含

from file1 import *
from file2 import *
Run Code Online (Sandbox Code Playgroud)

这主要是有效的,但我的呼吁reload(mymodule)不再做任何事情,因为它不会重新加载任何名为via*imports的东西.

有什么建议?

python python-2.7

6
推荐指数
1
解决办法
411
查看次数

如何重新加载python子模块?

我加载在Python(2.7.10)与子模块from app import sub,其中sub有一个config变量。因此,我可以运行print sub.config并查看一堆配置变量。不是超级复杂。

如果我在脚本中更改了配置变量,则必须有一种方法可以重新加载模块并查看更改。我发现了一些说明可以使用的指令reload(app.sub),但出现错误:

NameError: name 'app' is not defined
Run Code Online (Sandbox Code Playgroud)

如果我这样做reload(sub),错误是:

TypeError: reload() argument must be module
Run Code Online (Sandbox Code Playgroud)

如果可以,import app我可以使用查看配置print app.sub.config并重新加载reload(app)

-如果我这样做import app然后跑步

我找到了自动重新加载的说明: 在IPython中重新加载子模块

但是没有办法手动重新加载子模块吗?

python

5
推荐指数
2
解决办法
1426
查看次数

当要求从文件导入时,Jupyter 使用过时版本的函数

在文件中mylibrary.py我有这个功能

def myfunc(a,b):
    return a+b
Run Code Online (Sandbox Code Playgroud)

在 Jupyter 笔记本中我运行

import mylibrary
mylibrary.myfunc(1,2)
Run Code Online (Sandbox Code Playgroud)

并且输出3符合预期。

但是,当我更新文件mylibrary.py以使其内容为

def myfunc(a):
    return a+1
Run Code Online (Sandbox Code Playgroud)

并在 Jupyter 中运行

import mylibrary
mylibrary.myfunc(1,2)
Run Code Online (Sandbox Code Playgroud)

输出是一个错误:

TypeError: myfunc() missing 1 required positional argument: 'b'
Run Code Online (Sandbox Code Playgroud)

显然 Jupyter 仍在使用旧版本的mylibrary.py. mylibrary.py如果我在尝试导入缓存后删除为其创建的缓存,该错误仍然存​​在。

为什么会发生这种情况,我该如何纠正?(一个明显的解决方法是在 Jupyter 笔记本中定义myfunc,而不是将其分开,现在我会这样做。但是,这解决了问题而不是实际修复它,所以我仍然不明白出了什么问题,并且结果我以后可能会陷入陷阱。因此,我认为找出问题所在是值得的。)

python import jupyter-notebook jupyter-lab

5
推荐指数
0
解决办法
1355
查看次数

如何使代码中的 Python 包更新即时生效

我有以下代码行:

from pip import main as pipmain

# initial installation
pipmain(["install", "pyscenic==0.10.0"])
import pyscenic
pyscenic.__version__

# return 0.10.0
# Some large code here

# second installation
pipmain(["install", "install", "pyscenic==0.10.4"])
import pyscenic
pyscenic.__version__
# still return 0.10.0

# Another large chunk that required new version
Run Code Online (Sandbox Code Playgroud)

我想在我的代码中动态升级pyscenic包。然而,正如我上面指出的,在第二次安装中版本仍然没有改变。我预计它会更改为 0.10.4。我怎样才能正确地做到这一点?

我也尝试过这个,仍然没有效果:

import os
import importlib
os.system('pip install pyscenic==0.10.0')
import pyscenic
pyscenic.__version__
os.system('pip install pyscenic==0.10.4')
import pyscenic
pyscenic.__version__
importlib.reload(pyscenic)
pyscenic.__version__
Run Code Online (Sandbox Code Playgroud)

所有代码都在 IPython(交互式)上进行了测试。如果我退出IPython并再次重新输入它就会生效。但这不是我想要的。

python pip

5
推荐指数
1
解决办法
1381
查看次数