Cha*_*net 44 python import module package
假设我有一个模块foo.py和一个包foo/.如果我打电话
import foo
Run Code Online (Sandbox Code Playgroud)
哪一个会装?如何指定我的魔杖来加载模块或包?
zee*_*kay 21
我相信包总是会被加载.据我所知,你无法解决这个问题.因此,请更改包或模块名称.文档:http://docs.python.org/tutorial/modules.html#the-module-search-path
abb*_*abb 14
实际上,它是可能的(这段代码没有经过良好测试,但似乎有效).
文件 foo.py
print "foo module loaded"
Run Code Online (Sandbox Code Playgroud)
文件 foo/__init__.py
print "foo package loaded"
Run Code Online (Sandbox Code Playgroud)
文件 test1.py
import foo
Run Code Online (Sandbox Code Playgroud)
文件 test2.py
import os, imp
def import_module(dir, name):
""" load a module (not a package) with a given name
from the specified directory
"""
for description in imp.get_suffixes():
(suffix, mode, type) = description
if not suffix.startswith('.py'): continue
abs_path = os.path.join(dir, name + suffix)
if not os.path.exists(abs_path): continue
fh = open(abs_path)
return imp.load_module(name, fh, abs_path, (description))
import_module('.', 'foo')
Run Code Online (Sandbox Code Playgroud)
运行
$ python test1.py
foo package loaded
$ python test2.py
foo module loaded
Run Code Online (Sandbox Code Playgroud)
ste*_*ppo 10
也许你想将你的课程从foo.py模块转移到__init__.py.
这样,您就可以从包中导入它们以及导入可选的子包:
档案foo/__init__.py:
class Bar(object):
...
Run Code Online (Sandbox Code Playgroud)
档案mymodule.py:
from foo import Bar
from foo.subfoo import ...
Run Code Online (Sandbox Code Playgroud)
尽管如此,我希望有人仔细检查这种方法,让我知道它是否正确或__init__模块不应该像这样使用.
| 归档时间: |
|
| 查看次数: |
13142 次 |
| 最近记录: |