Python——从非packag目录导入模块

2024-05-09 04:02:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的目录结构。。。

dir/
  build.py
dir2
  dir3/
  packages.py

现在build.py需要packages.py——注意dir2不是一个包。

那么,将packages.py加载到build.py(目录结构不能更改)中的最佳方法是什么

编辑

sys.path.append解决方案看起来不错——但是有一件事——我需要很少使用packages.py文件——并且保留一个sys.path,其中包含一个很少使用但位于前端的目录——这是最好的事情吗?

编辑II

我认为imp解决方案是最好的。

import imp    
packages = imp.load_source('packages', '/path/to/packages.py')

编辑三

对于Python 3.x

注意imp.load_source和其他一些函数have been deprecated。所以你今天应该使用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()

Tags: pathpybuild目录编辑sourcepackagessys
2条回答

你可以:

sys.path.append('./dir2/dir3')
import packages

或者更好:

sys.path.append(os.path.join(os.path.dirname(__file__), 'dir2/dir3'))
import packages

或者(从这里取:How to import a module given the full path?

import imp    
packages = imp.load_source('packages', '/path/to/packages.py')

“唯一正确的方法”是第三种吗?-避免直接弄乱sys.path

我遇到了同样的问题,我解决了它。

dir/
  build.py
dir2
  dir3/
    packages.py
  1. 将文件__init__.py添加到dir1, dir2, dir3 ...
  2. 在包层次结构中,使用两点。

bulid.py要导入packages.py,请在bulid.py中写入:

import ..dir2.dir3.packages
from ..dir2.dir3.packages import function

https://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

Importing modules from parent folder

How to import a Python class that is in a directory above?

相关问题 更多 >

    热门问题