【问题标题】:Fabric cannot import module in functionFabric 无法在函数中导入模块
【发布时间】:2013-03-19 00:39:17
【问题描述】:

这是我的织物脚本的摘录

def create_php_site(name):
    """
    Creates a new php installation
    """

    from resource.php.git import gitignore
    from resource.php.nginx import nginx

当我运行它时,我收到错误“ImportError: No module named php.git”

但如果我将“from resource.php.git import gitignore”移到函数之外,它就可以工作。有任何想法吗? 每一层resource.php.git都有__init__.py

在resource/php/中有git.py:

gitignore = """.DS_Store
._.DS_Store
"""

【问题讨论】:

  • 你的资源/php/git 目录中有什么?它实际上是一个python模块吗?
  • 是的,它实际上是一个python模块。
  • 那么在 git.py 中,gitignore 是什么?
  • 我用你的目录结构创建了一个新项目并为我工作。
  • 是的,很奇怪,我想是因为面料...

标签: python import module fabric


【解决方案1】:

您遇到了命名空间冲突。

不能将您的目录命名为 resource,因为有一个名为 resource - http://docs.python.org/2/library/resource.html 的标准 Python 模块

所以当你声明from resource... 时,所有的地狱都会崩溃。 Python 找不到php.git,因为事实上,在标准的resource python 模块中,没有这样的功能。

我创建了一个类似的示例,但将resource 目录重命名为myresource。执行导入然后完美工作。像这样:-

>>> from myresource.php.git import gitignore
>>> gitignore
'my ignore strings'

重要

还请确保您的myresource 目录中有一个__init__.py 文件。

【讨论】:

  • 是的。由于您的git.pyresource/php/nginx 目录中,因此您需要执行from resource.php.nginx.git import gitignore
  • 您在resource/php 中也有一个git 目录?如果是这种情况,您将遇到名称空间冲突。您应该将您的 git.py 文件重命名为其他名称,或者将 git 目录(包含其自己的 __init__ 文件)重命名为其他名称。
  • 不是资源/php/中的git目录,只有git.py和__init__.py
  • 好的,想通了。您与标准 python 模块存在命名空间冲突。答案已更新。
  • 但我尝试将资源重命名为 res 并且仍然存在问题。我认为这是由于面料
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2021-12-29
  • 2020-06-06
  • 2019-12-15
  • 2014-08-09
  • 2020-07-02
相关资源
最近更新 更多