gpt4 book ai didi

Python "ImportError: No module named"问题

转载 作者:IT老高 更新时间:2023-10-28 21:12:59 25 4
gpt4 key购买 nike

我在 Windows XP SP3 上运行 Python 2.6.1。我的 IDE 是 PyCharm 1.0-Beta 2 build PY-96.1055。

我将我的 .py 文件存储在名为“src”的目录中;它有一个空的 __init__.py 文件,除了顶部的“__author__”属性。

其中一个叫做Matrix.py:

#!/usr/bin/env python
"""
"Core Python Programming" chapter 6.
A simple Matrix class that allows addition and multiplication
"""
__author__ = 'Michael'
__credits__ = []
__version__ = "1.0"
__maintainer__ = "Michael"
__status__ = "Development"

class Matrix(object):
"""
exercise 6.16: MxN matrix addition and multiplication
"""
def __init__(self, rows, cols, values = []):
self.rows = rows
self.cols = cols
self.matrix = values

def show(self):
""" display matrix"""
print '['
for i in range(0, self.rows):
print '(',
for j in range(0, self.cols-1):
print self.matrix[i][j], ',',
print self.matrix[i][self.cols-1], ')'
print ']'

def get(self, row, col):
return self.matrix[row][col]

def set(self, row, col, value):
self.matrix[row][col] = value

def rows(self):
return self.rows

def cols(self):
return self.cols

def add(self, other):
result = []
for i in range(0, self.rows):
row = []
for j in range(0, self.cols):
row.append(self.matrix[i][j] + other.get(i, j))
result.append(row)
return Matrix(self.rows, self.cols, result)

def mul(self, other):
result = []
for i in range(0, self.rows):
row = []
for j in range(0, other.cols):
sum = 0
for k in range(0, self.cols):
sum += self.matrix[i][k]*other.get(k,j)
row.append(sum)
result.append(row)
return Matrix(self.rows, other.cols, result)

def __cmp__(self, other):
"""
deep equals between two matricies
first check rows, then cols, then values
"""
if self.rows != other.rows:
return self.rows.cmp(other.rows)
if self.cols != other.cols:
return self.cols.cmp(other.cols)
for i in range(0, self.rows):
for j in range(0, self.cols):
if self.matrix[i][j] != other.get(i,j):
return self.matrix[i][j] == (other.get(i,j))
return True # if you get here, it means size and values are equal



if __name__ == '__main__':
a = Matrix(3, 3, [[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = Matrix(3, 3, [[6, 5, 4], [1, 1, 1], [2, 1, 0]])
c = Matrix(3, 3, [[2, 0, 0], [0, 2, 0], [0, 0, 2]])
a.show()
b.show()
c.show()
a.add(b).show()
a.mul(c).show()

我创建了一个名为“test”的新目录,其中还有一个空的 __init__.py 文件,除了顶部的“__author__”属性。我创建了一个 MatrixTest.py 来统一我的 Matrix 类:

#!/usr/bin/env python
"""
Unit test case for Matrix class
See http://jaynes.colorado.edu/PythonGuidelines.html#module_formatting for Python coding guidelines
"""

import unittest #use my unittestfp instead for floating point
from src import Matrix # Matrix class to be tested

__author__ = 'Michael'
__credits__ = []
__license__ = "GPL"
__version__ = "1.0"
__maintainer__ = "Michael"
__status__ = "Development"

class MatrixTest(unittest.TestCase):
"""Unit tests for Matrix class"""
def setUp(self):
self.a = Matrix.Matrix(3, 3, [[1, 2, 3], [4, 5, 6], [7, 8, 9]])
self.b = Matrix.Matrix(3, 3, [[6, 5, 4], [1, 1, 1], [2, 1, 0]])
self.c = Matrix.Matrix(3, 3, [[2, 0, 0], [0, 2, 0], [0, 0, 2]])

def testAdd(self):
expected = Matrix.Matrix(3, 3, [[7, 7, 7], [5, 6, 7], [9, 9, 9]]) # need to learn how to write equals for Matrix
self.a.add(self.b)
assert self.a == expected

if __name__ == '__main__': #run tests if called from command-line
suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
unittest.TextTestRunner(verbosity=2).run(suite)

然而,当我尝试运行我的 MatrixTest 时,我得到了这个错误:

C:\Tools\Python-2.6.1\python.exe "C:/Documents and Settings/Michael/My Documents/Projects/Python/learning/core/test/MatrixTest.py"
Traceback (most recent call last):
File "C:/Documents and Settings/Michael/My Documents/Projects/Python/learning/core/test/MatrixTest.py", line 8, in <module>
from src import Matrix # Matrix class to be tested
ImportError: No module named src

Process finished with exit code 1

我读过的所有内容都告诉我,在我的所有目录中都有 init.py 应该可以解决这个问题。

如果有人能指出我错过了什么,我将不胜感激。

我还希望获得有关开发和维护源代码和单元测试类的最佳方法的建议。我正在以我在编写 Java 时通常使用的方式思考这个问题:/src 和/test 目录,下面有相同的包结构。这是“Pythonic”的想法,还是我应该考虑另一种组织方案?

更新:

感谢那些回答的人,这是对我有用的解决方案:

  1. 将import改为from src import Matrix #待测矩阵类
  2. sys.path 作为环境变量添加到我的 unittest 配置中,./src 和 ./test 目录用分号分隔。
  3. 如图所示更改 MatrixTest.py 中的声明。

最佳答案

这有点猜测,但我认为你需要 change your PYTHONPATH包含 src 和 test 目录的环境变量。

src 目录中运行的程序可能一直在运行,因为 Python 会自动将当前运行的脚本目录插入到 sys.path 中。因此,只要您还执行驻留在 src 中的脚本,在 src 中导入模块就可以了。

但是现在您正在从 test 运行脚本,test 目录会自动添加到 sys.path,而 src 不是。

PYTHONPATH 中列出的所有目录都添加到 sys.path,Python 搜索 sys.path 以查找模块。

另外,如果你说

from src import Matrix

然后 Matrix 将引用包,您需要说 Matrix.Matrix 才能访问该类。

关于Python "ImportError: No module named"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com