Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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_Python Import - Fatal编程技术网

带参数的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(..)
    

    这不是我在这里想要的。因为如果用户在他们的系统上有自动标签,它将使用该版本。我希望能够以某种方式定义一个导入,让用户选择“在导入时”。现在修改问题以使其更清楚…这不是我在这里想要的。因为如果用户在他们的系统上有自动标签,它将使用该版本。我希望能够以某种方式定义一个导入,让用户选择“在导入时”。现在修改问题以使其更清楚…这可能是你的方式。我会考虑的这可能是你的方式。我会考虑的