目前我正在开发一个包含子模块并使用numpy/scipy的python项目.Ipython用作交互式控制台.不幸的是,我对我现在使用的工作流程不是很满意,我将不胜感激.
在IPython中,框架由一个简单的import命令加载.但是,通常需要更改框架的一个子模块中的代码.此时已经加载了一个模型,我使用IPython与它进行交互.
现在,框架包含许多相互依赖的模块,即在最初加载框架时,主模块正在导入和配置子模块.只有在使用重新加载模块时才会执行对代码的更改reload(main_mod.sub_mod).这很麻烦,因为我需要使用完整路径单独重新加载所有已更改的模块.如果reload(main_module)还要重新加载所有子模块,但没有重新加载numpy/scipy 将是非常方便的..
在我的应用程序中,我想使用:
packageA,这需要 packageX==1.3packageB,这需要 packageX==1.4packageX==1.5如何安装packageX带pip的多个版本来处理这种情况?
使用PIP安装新的python包时,是否可以更改包名称,因为还有另一个包含相同名称的包?
或者,我如何更改现有包的名称?
我有2个python脚本a.py和b.py,我想编写一个bash脚本,它将加载a.py而不是运行b.py,直到a.py完成它为止.简单地
#!/usr/bin/env bash
python a.py
python b.py
Run Code Online (Sandbox Code Playgroud)
但这很天真,检查a.py是否已完成......我该怎么做?
在Python中,您可以按如下方式重新加载模块...
import foobar
import importlib
importlib.reload(foobar)
Run Code Online (Sandbox Code Playgroud)
这适用于.py文件,但对于Python包,它只会重新加载包而不是任何嵌套的子模块.
随着包:
foobar/__init__.pyfoobar/spam.pyfoobar/eggs.pyPython脚本:
import foobar
# assume `spam/__init__.py` is importing `.spam`
# so we dont need an explicit import.
print(foobar.spam) # ok
import importlib
importlib.reload(foobar)
# foobar.spam WONT be reloaded.
Run Code Online (Sandbox Code Playgroud)
不建议这是一个错误,但有时重新加载包及其所有子模块是有用的.(例如,如果要在脚本运行时编辑模块).
在Python中以递归方式重新加载包有哪些好方法?
笔记:
出于此问题的目的,假设最新的Python3.x
(目前正在使用importlib)
from foobar import *),因为它们可能使重载逻辑复杂化.