【问题标题】:"import numpy" tries to load my own package“import numpy”尝试加载我自己的包
【发布时间】:2013-06-28 09:07:30
【问题描述】:

我有一个 python (2.7) 项目,其中包含我自己的包 utiloperator(等等)。

我读到了relative imports,但也许我不明白。我有以下目录结构:

top-dir/
  util/__init__.py (empty)
  util/ua.py
  util/ub.py
  operator/__init__.py 
   ...

  test/test1.py

test1.py 文件包含

#!/usr/bin/env python2
from __future__ import absolute_import # removing this line dosn't change anything. It's default functionality in python2.7 I guess
import numpy as np

当我在test/ 文件夹中执行test1.py inside 时没问题。但是当我移动到top-dir/ 时,import numpy 想要包含我自己的util 包:

Traceback (most recent call last):
  File "tests/laplace_2d_square.py", line 4, in <module>
    import numpy as np
  File "/usr/lib/python2.7/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/site-packages/numpy/lib/__init__.py", line 4, in <module>
    from type_check import *
  File "/usr/lib/python2.7/site-packages/numpy/lib/type_check.py", line 8, in <module>
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.7/site-packages/numpy/core/__init__.py", line 45, in <module>
    from numpy.testing import Tester
  File "/usr/lib/python2.7/site-packages/numpy/testing/__init__.py", line 8, in <module>
    from unittest import TestCase
  File "/usr/lib/python2.7/unittest/__init__.py", line 58, in <module>
    from .result import TestResult
  File "/usr/lib/python2.7/unittest/result.py", line 9, in <module>
    from . import util
  File "/usr/lib/python2.7/unittest/util.py", line 2, in <module>
    from collections import namedtuple, OrderedDict
  File "/usr/lib/python2.7/collections.py", line 9, in <module>
    from operator import itemgetter as _itemgetter, eq as _eq
ImportError: cannot import name itemgetter

麻烦的线是要么

    from . import util

或许

    from operator import itemgetter as _itemgetter, eq as _eq

我能做什么?

【问题讨论】:

    标签: python python-2.7 package python-import


    【解决方案1】:

    operator 是 Python 标准库中的一个模块。将您的模块与标准模块同名会带来麻烦,应该避免。

    如果您绝对需要一种方法来解决这个问题,您可以尝试使用sys.path 变量。第一个元素通常是脚本的目录,或者是引导导入系统到当前目录的空字符串。

    oldpath = sys.path.pop(0)
    import numpy
    sys.path.insert(0, oldpath)
    

    【讨论】:

    • 感谢您的回答。不幸的是,他们努力实现相对路径,然后这样的事情就无法避免了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多