我该怎么做才能导入不是stdlib的math.py.

时间:2013-08-05 17:01:49

标签: python python-import

我从python.org上阅读了文档,但仍然对此问题感到困惑。在一个项目中,我有以下脚本结构:

dir a:

    math.py containing func c()
    main.py containing main()

我应该在main.py中做什么才能在dir a而不是stdlib下导入数学?

导入数学只是不起作用

3 个答案:

答案 0 :(得分:2)

修改

抱歉我的错误...这将永远不会奏效。您可以选择为顶级包提供一个与标准库中的名称不冲突的名称。或者主脚本不能在包目录中。所以基本上你可以:

将您的模块重命名为my_math.py,然后main.py可以位于同一目录中,您可以这样做:

from my_math import c
c()

或者您创建了一个包,例如文件夹名test(或与标准库包冲突的任何其他名称)包含文件:__init__.pymath.py,以及与test创建main.py的级别相同,然后代码如下:

from test.math import c
c()

文件夹结构:

.
|-- test
|   |-- __init__.py
|   `-- math.py
`-- main.py

答案 1 :(得分:1)

这可以工作。

sys.path.insert(0,'path/to/math.py')
import math

这将在stFlibs BEFORE指定目录下进行python检查。出于同样的原因,这是一种冒险的方法。我建议将math.py放在其OWN目录中并使用该路径,这样就不会改变任何其他内容。

如果您还导入了其他模块,我还建议您导入此LAST。

import stuff
import morestuff
sys.path.insert(0,'path/to/math')
import math

同样,不推荐使用“数学”。重命名是最好的,特别是对于像“数学”这样的流行模块。

答案 2 :(得分:0)

您可以导入具有模块文件路径的确切规范的模块,并为模块提供特定名称。 看看imp模块。

以下是一个例子:

# file: math.py
def say_hello():
    print "Hello!"

和主文件:

# file: main.py
import imp
my_math = imp.load_source("my_math", "math.py")
my_math.say_hello()

如果两个文件都位于当前工作目录的位置,这对我有用。

请注意,这种方法往往难以维护且不灵活。不与标准库和其他语言功能名称发生冲突通常是件好事。因此,您应该重命名该模块或将其移动到(非全局)命名空间,即子包。

供参考: