tre*_*der 10 python python-3.x
我有这样的目录结构......
dir/
build.py
dir2
dir3/
packages.py
Run Code Online (Sandbox Code Playgroud)
现在的build.py需求packages.py- 并注意dir2不是一个包.
那么什么是packages.py加载的最佳方式build.py(目录结构无法更改)
编辑
该sys.path.append解决方案似乎不错-但有一两件事-我需要使用packages.py很少的文件-并保持sys.path包括很少使用的目录,但在前面-那是最好的事情?
编辑二
我认为imp解决方案是最好的.
import imp
packages = imp.load_source('packages', '/path/to/packages.py')
Run Code Online (Sandbox Code Playgroud)
编辑III
请注意,imp.load_source其他一些功能已被弃用.所以你应该使用imp.load_module今天.
fp, pathname, description = imp.find_module('packages', '/path/to/packages.py')
try:
mod = imp.load_module('packages', fp, pathname, description)
finally:
# since we may exit via an exception, close fp explicitly
if fp:
fp.close()
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
sys.path.append('./dir2/dir3')
import packages
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
sys.path.append(os.path.join(os.path.dirname(__file__), 'dir2/dir3'))
import packages
Run Code Online (Sandbox Code Playgroud)
或者(从这里开始:如何在给定完整路径的情况下导入模块?)
import imp
packages = imp.load_source('packages', '/path/to/packages.py')
Run Code Online (Sandbox Code Playgroud)
“一个正确的方法”会是第三种吗?- 避免直接弄乱sys.path
我遇到同样的问题,我解决了。
dir/
build.py
dir2
dir3/
packages.py
Run Code Online (Sandbox Code Playgroud)
__init__.py到dir1, dir2, dir3 ...bulid.py想要导入packages.py,在bulid.py中写入:
import ..dir2.dir3.packages
from ..dir2.dir3.packages import function
Run Code Online (Sandbox Code Playgroud)
https://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports
| 归档时间: |
|
| 查看次数: |
5639 次 |
| 最近记录: |