带参数的Python导入语句
我正在我的一个库中使用带参数的Python导入语句,python,python-import,Python,Python Import,我正在我的一个库中使用numpy。这并不奇怪 一个用户基本上想要我的项目的副本,我不使用默认的numpy,而是使用与autograd捆绑在一起的副本。例如,假设我有一个哑函数: import numpy def doSomething(x): return numpy.sin(x) 他们想要一份库的副本,其中所有这些import numpy都被autograd import numpy的替换: from autograd import numpy def doSomething(x):
numpy
。这并不奇怪
一个用户基本上想要我的项目的副本,我不使用默认的numpy
,而是使用与autograd
捆绑在一起的副本。例如,假设我有一个哑函数:
import numpy
def doSomething(x):
return numpy.sin(x)
他们想要一份库的副本,其中所有这些import numpy
都被autograd import numpy的替换:
from autograd import numpy
def doSomething(x):
return numpy.sin(x)
这将使他们能够轻松地计算我函数的梯度和雅可比矩阵
我想知道在不复制整个代码库和替换所有这些行的情况下,最简单的处理方法是什么
我知道的选项有:
我可以复制代码库(lib
和lib\u autograd
),其中第一个使用import numpy
,第二个使用来自autograd import numpy的。这很糟糕,因为我必须维护两个代码基
如果可用,我可以从autograd
自动导入:
try:
from autograd import numpy
except ImportError:
import numpy
我不想这样做的原因是很多人已经高度优化了numpy
安装,而autograd
可能没有。因此,我想给用户一个选项来导入哪个版本。如果用户使用了autograd
版本,则强制用户使用该版本似乎不好,因为用户不清楚发生了什么,如果用户希望在默认的numpy
安装中使用库,则需要卸载autograd
那么我有什么选择呢
理想情况下,有一种方法可以做一些事情,比如将参数传递给import
语句(我确实意识到您不能这样做):
您可以通过以下方式进行“有条件”导入:
try:
from autograd import numpy
except ImportError:
import numpy
另一个选项是使用环境变量,该变量可以从autograd
或常规变量切换使用numpy
,因为这里您可以使用autograd.numpy
(如果存在)或numpy
。如果有autograd
模块/软件包,则您没有使用numpy
的选项
要详细说明如何为用户提供切换选项,有一种可能性:
import os
if os.environ.get('AUTOGRADNUMPY'):
try:
from autograd import numpy
except ImportError:
import numpy
else:
import numpy
当您要从autograd
程序包加载numpy
时,将环境变量AUTOGRADNUMPY
设置为True
(或任何其他非空字符串)。如果未设置或不存在,则导入常规numpy
如果用户至少安装了numpy
。您可以通过以下方式进行“有条件”导入:
try:
from autograd import numpy
except ImportError:
import numpy
另一个选项是使用环境变量,该变量可以从autograd
或常规变量切换使用numpy
,因为这里您可以使用autograd.numpy
(如果存在)或numpy
。如果有autograd
模块/软件包,则您没有使用numpy
的选项
要详细说明如何为用户提供切换选项,有一种可能性:
import os
if os.environ.get('AUTOGRADNUMPY'):
try:
from autograd import numpy
except ImportError:
import numpy
else:
import numpy
当您要从autograd
程序包加载numpy
时,将环境变量AUTOGRADNUMPY
设置为True
(或任何其他非空字符串)。如果未设置或不存在,则导入常规numpy
如果用户至少安装了numpy
,则所有这些都有效。这可能有助于:
try:
from autograd import numpy as np
except ImportError:
import numpy as np
...
...
np.sum(..)
这可能有助于:
try:
from autograd import numpy as np
except ImportError:
import numpy as np
...
...
np.sum(..)
这不是我在这里想要的。因为如果用户在他们的系统上有自动标签,它将使用该版本。我希望能够以某种方式定义一个导入,让用户选择“在导入时”。现在修改问题以使其更清楚…这不是我在这里想要的。因为如果用户在他们的系统上有自动标签,它将使用该版本。我希望能够以某种方式定义一个导入,让用户选择“在导入时”。现在修改问题以使其更清楚…这可能是你的方式。我会考虑的这可能是你的方式。我会考虑的