0

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

目录一个:

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

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

导入数学不起作用

4

3 回答 3

2

编辑:

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

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

from my_math import c
c()

或者您创建一个包,例如文件夹名称test(或任何其他与标准库包不冲突的名称),其中包含 files:__init__.py和,并且与您创建 amath.py处于同一级别,然后代码将如下所示:testmain.py

from test.math import c
c()

文件夹结构:

.
|-- test
|   |-- __init__.py
|   `-- math.py
`-- main.py
于 2013-08-05T17:05:08.630 回答
1

这可以工作。

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

这将在 stdlibs 之前的指定目录中进行 python 检查。出于同样的原因,这是一种危险的方法。我建议将 math.py 放在其 OWN 目录中并使用该路径,因此没有其他任何更改。

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

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

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

于 2013-08-05T17:27:03.273 回答
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()

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

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

以供参考:

于 2013-08-05T18:07:41.400 回答