[英]How do I import a module from the same directory explicitly in Python 2?
[英]How to import from a module in the same directory?
我正在尝试制作Python3.6软件包,但是从软件包中导入时遇到了ModuleNotFound错误。 该软件包具有以下结构:
project/
project/
cache/
default.py
interface.py
__init__.py
handler.py
test.py
__init__.py
文件包含以下内容:
from .handler import Handler
def getHandler(access_token=None, **kwargs):
return Handler(access_token, **kwargs)
然后在handler.py
,我尝试使用以下内容从cache
导入:
from .cache.default import DefaultCache
目标是通过客户端代码允许以下操作:
import project
handler = project.getHandler()
最后一次导入失败,我不清楚原因。 有任何想法吗? TIA。
不确定它的相关性如何,但是我正在外部project
目录中运行以下命令来进行测试:
> pip install .
> python3 ../test.py
这将返回以下回溯(venv) Jamess-MacBook-Pro-2:project james$ python3 ../test.py Traceback (most recent call last): File "../test.py", line 1, in <module> import project File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/__init__.py", line 1, in <module> from .handler import Handler File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/handler.py", line 7, in <module> from .cache.default import DefaultCache ModuleNotFoundError: No module named 'project.cache'
从您的追溯:
File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/handler.py", line 7, in <module>
from cache.default import DefaultCache
这与您在此处显示的代码不同:
from .cache.default import DefaultCache
.cache.default
是正确的-这是project
内部的相对路径,因此它将在project/cache/default.py
找到project.cache.default
。
实际代码中没有前导点的cache.default
是来自sys.path
任何目录的绝对路径。 由于在任何这些目录中都没有名为cache
文件或目录,因此它将失败。
同时,您的项目目录结构似乎与您向我们展示的也不一样。 否则, import project
将找不到安装的版本。 默认情况下(我认为您没有做任何更改), sys.path
的第一项“是包含用于调用Python解释器的脚本的目录”。 鉴于您在此处发布的结构,这意味着import project
应在与test.py
相同的目录中找到project
子目录,而不是venv的site-packages
中的子目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.