Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从同一目录中的模块导入?_Python_Python 3.x_Python Import - Fatal编程技术网

Python 如何从同一目录中的模块导入?

Python 如何从同一目录中的模块导入?,python,python-3.x,python-import,Python,Python 3.x,Python Import,我正在尝试创建Python3.6包,但从包中导入时遇到ModuleNotFound错误。包具有以下结构: project/ project/ cache/ default.py interface.py __init__.py handler.py test.py _u_init__u;.py文件包含以下内容: from .handler import Handler def getHan

我正在尝试创建Python3.6包,但从包中导入时遇到ModuleNotFound错误。包具有以下结构:

project/
    project/
        cache/
            default.py
            interface.py
        __init__.py
        handler.py
test.py
_u_init__u;.py文件包含以下内容:

from .handler import Handler

def getHandler(access_token=None, **kwargs):
    return Handler(access_token, **kwargs)
from .cache.default import DefaultCache
然后在handler.py中,我尝试从缓存导入以下内容:

from .handler import Handler

def getHandler(access_token=None, **kwargs):
    return Handler(access_token, **kwargs)
from .cache.default import DefaultCache
目标是通过客户端代码实现以下功能:

import project

handler = project.getHandler()
最后一次导入失败了,我不清楚原因。有什么想法吗?蒂亚

不确定它的相关性如何,但我通过在外部项目目录中运行以下命令来测试这一点:

> pip install .
> python3 ../test.py
这将返回以下回溯 venv Jamess-MacBook-Pro-2:project james$python3../test.py 回溯最近一次呼叫上次: 文件../test.py,第1行,在 导入项目 文件/Users/james/Work/Project/Project/venv/lib/python3.6/site-packages/Project/_-init__.py,第1行,in 从.handler导入处理程序 文件/Users/james/Work/Project/Project/venv/lib/python3.6/site-packages/Project/handler.py,第7行,在 from.cache.default导入默认缓存 ModuleNotFoundError:没有名为“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
.cache.default是正确的,这是项目中的相对路径,因此它将在project/cache/default.py中找到project.cache.default

实际代码中不带前导点的cache.default是来自sys.path中任何目录的绝对路径。因为在这些目录中没有名为cache的文件或目录,所以它会失败

同时,您的项目目录结构似乎也与您向我们展示的不一样。否则,导入项目将找不到已安装的版本。默认情况下,我认为您没有做任何更改,第一个条目是包含用于调用Python解释器的脚本的目录。鉴于您在此处发布的结构,这意味着import project应该在与test.py相同的目录中找到project子目录,而不是在您的venv网站包中找到的目录。

从您的回溯:

  File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/handler.py", line 7, in <module>
    from cache.default import DefaultCache
.cache.default是正确的,这是项目中的相对路径,因此它将在project/cache/default.py中找到project.cache.default

实际代码中不带前导点的cache.default是来自sys.path中任何目录的绝对路径。因为在这些目录中没有名为cache的文件或目录,所以它会失败


同时,您的项目目录结构似乎也与您向我们展示的不一样。否则,导入项目将找不到已安装的版本。默认情况下,我认为您没有做任何更改,第一个条目是包含用于调用Python解释器的脚本的目录。考虑到您在此处发布的结构,这意味着import project应该在与test.py相同的目录中找到project子目录,而不是venv站点包中的目录。

remove starting。从您的importhm中,我这样做了,现在得到以下错误:从缓存。默认导入DefaultCache ModuleNotFoundError:没有名为“缓存”的模块。此外,我已更新原始问题,以包含有关我如何测试的信息。@mad_uu为什么?在Python3中,这将使其成为绝对导入,并且sys.path下没有直接命名的handler。我是否运行python3../test.py或cd。。;python3 test.py、导入项目、from.handler import handler和from.cache.default import DefaultCache都可以工作,并且它会在没有任何错误的情况下退出。尝试printsys.path,您将看到主脚本的路径位于virtualenv的站点包目录之前。或者至少这是默认行为;从那里查看文档以及指向站点和PYTHONPATH的链接。删除开始。从您的importhm中,我这样做了,现在得到以下错误:从缓存。默认导入DefaultCache ModuleNotFoundError:没有名为“缓存”的模块。此外,我已更新原始问题,以包含有关我如何测试的信息。@mad_uu为什么?在Python3中,这将使其成为绝对导入,并且sys.path下没有直接命名的handler。我是否运行python3../test.py或cd。。;python3 test.py、导入项目、from.handler import handler和from.cache.default import DefaultCache都可以工作,并且它会在没有任何错误的情况下退出。尝试printsys.path,您将看到主脚本的路径位于virtualenv的站点包目录之前。或者至少这是默认行为;从那里查看文档以及指向站点和PYTHONPATH的链接。啊,你是对的,我复制了错误的回溯。那是我尝试不同导入路径的地方。更新了。看起来问题在于,由于project是嵌套的/project/project,并且test.py与外部project目录位于同一目录中,因此它在不同的
没有我想象的那么好。非常感谢你的帮助!啊,你说得对,我复制了错误的回溯。那是我尝试不同导入路径的地方。更新了。看起来问题在于,由于project是嵌套的/project/project,并且test.py与外部project目录位于同一目录中,因此它的位置与我假设的不同。非常感谢你的帮助!