我从 python.org 阅读了文档,但仍然对这个问题感到困惑。在一个项目中,我有以下脚本结构:
目录一个:
math.py containing func c()
main.py containing main()
为了在 dir a 而不是 stdlib 下导入数学,我应该在 main.py 中做什么?
导入数学不起作用
我从 python.org 阅读了文档,但仍然对这个问题感到困惑。在一个项目中,我有以下脚本结构:
目录一个:
math.py containing func c()
main.py containing main()
为了在 dir a 而不是 stdlib 下导入数学,我应该在 main.py 中做什么?
导入数学不起作用
编辑:
对不起我的错误......这永远不会奏效。您可以选择为您的顶级包指定一个与标准库中的名称不冲突的名称。或者主脚本不能在包目录中。所以基本上你可以:
将您的模块重命名为my_math.py
,然后main.py
可以在同一目录中,您可以这样做:
from my_math import c
c()
或者您创建一个包,例如文件夹名称test
(或任何其他与标准库包不冲突的名称),其中包含 files:__init__.py
和,并且与您创建 amath.py
处于同一级别,然后代码将如下所示:test
main.py
from test.math import c
c()
文件夹结构:
.
|-- test
| |-- __init__.py
| `-- math.py
`-- main.py
这可以工作。
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
同样,不建议使用“数学”。重命名是最好的,特别是对于像“数学”这样的流行模块。
您可以导入具有模块文件路径的精确规范的模块,并为模块指定一个特定的名称。看看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()
鉴于这两个文件都位于当前工作目录所在的位置,这对我有用。
请注意,这种方法往往是高度不可维护和不灵活的。不与标准库和其他语言功能名称发生冲突通常是一件好事。因此,您应该重命名该模块或将其移至(非全局)命名空间,即子包。
以供参考: