如何导入给定相对路径的Python模块?
例如,如果dirFoo包含Foo.py和dirBar,而dirBar包含Bar.py,我如何将Bar.py导入Foo.py?
下面是一个视觉表示:
dirFoo\
Foo.py
dirBar\
Bar.py
Foo希望包含Bar,但重组文件夹层次结构不是一个选项。
如何导入给定相对路径的Python模块?
例如,如果dirFoo包含Foo.py和dirBar,而dirBar包含Bar.py,我如何将Bar.py导入Foo.py?
下面是一个视觉表示:
dirFoo\
Foo.py
dirBar\
Bar.py
Foo希望包含Bar,但重组文件夹层次结构不是一个选项。
当前回答
from .dirBar import Bar
而不是:
from dirBar import Bar
以防安装了另一个dirBar并混淆了foo.py阅读器。
其他回答
Linux用户快速而肮脏的方式
如果您只是在修补,而不关心部署问题,则可以使用符号链接(假设您的文件系统支持该链接)使模块或包在请求模块的文件夹中直接可见。
ln -s (path)/module_name.py
or
ln -s (path)/package_name
注意:“模块”是扩展名为.py的任何文件,“包”是包含__init__.py文件(可以是空文件)的任何文件夹。从使用的角度来看,模块和包是相同的——都会根据import命令的请求公开其包含的“定义和语句”。
参见:http://docs.python.org/2/tutorial/modules.html
添加__init__.py文件:
dirFoo\
Foo.py
dirBar\
__init__.py
Bar.py
然后将以下代码添加到Foo.py的开头:
import sys
sys.path.append('dirBar')
import Bar
只需使用:从Desktop.filename导入一些内容
例子:
给定目录中的文件名为test.py用户/用户/桌面,并将导入所有内容。
代码:
from Desktop.test import *
但请确保在该目录中创建一个名为“__init__.py”的空文件
只需执行简单的操作,即可从其他文件夹导入.py文件。
假设您有一个目录,如:
lib/abc.py
然后在lib文件夹中保留一个空文件
__init__.py
然后使用
from lib.abc import <Your Module name>
在导入模块层次结构的每个文件夹中保留__init__.py文件。
称我过于谨慎,但我喜欢让我的更便携,因为假设文件总是在每台计算机上的同一位置是不安全的。就我个人而言,我让代码先查找文件路径。我使用Linux,所以我的看起来像这样:
import os, sys
from subprocess import Popen, PIPE
try:
path = Popen("find / -name 'file' -type f", shell=True, stdout=PIPE).stdout.read().splitlines()[0]
if not sys.path.__contains__(path):
sys.path.append(path)
except IndexError:
raise RuntimeError("You must have FILE to run this program!")
当然,除非你打算把这些包装在一起。但如果是这样的话,你实际上不需要两个单独的文件。