我修改了Python代码,但Python似乎没有读取这些更改

1 投票
2 回答
1212 浏览
提问于 2025-04-16 06:38

我最近在用Python编程,遇到了一个非常烦人的问题。我写了一个小的矩阵库,然后在另一个模块里用它(比如,import matrixlib)。每次发现一个bug,修复后再运行程序,结果bug还是在。

我试着加了几个打印语句来看看发生了什么,但它们根本不打印出来。后来我才明白,我的修改没有被Python识别到。所以我开始删除.pyc文件(这是预编译的Python文件),但这也没用。

最后我放弃了,直接在矩阵库的文件里编程,但这个问题又回来了。我加了一个打印语句来弄清楚某个方法的情况,修复了问题后把它删掉,但它还是在打印。我甚至在一个不同的文本编辑器里搜索了'print',结果在代码里根本找不到任何打印语句。

这其实不算是代码的问题,我可能搞砸了我的Python安装。(这个问题只在我的Windows电脑上出现,在Linux电脑上没有)。如果你想看看代码,随便看看。那个被注释掉的打印语句在我的代码里,居然还是执行了。

    def det(self):
        #Had better be a square matrix.
        if self.colCount() != self.rowCount():
            return None
        #Are we a 1x1 matrix?
        if self.colCount() == self.rowCount() == 1:
            return self.a[0][0]
        #Are we a 2x2 matrix?
        if self.colCount() == self.rowCount() == 2:
            return self.a[0][0]*self.a[1][1]-self.a[1][0]*self.a[0][1]
        #Not a 2x2... so lets start recursing.
        d = 0
        for e in range(0,self.colCount()):
            tmp = partition(self.a, 0, e)
            if e%2 == 0:
                d = d + self.a[0][e]*self.detRecursive(tmp)
            else:
                d = d - self.a[0][e]*self.detRecursive(tmp)
        #print d
        return d

    def detRecursive(self, matrix):
        m = Matrix()
        m.setMatrix(matrix)

        return m.det()

    def partition(a, r, c):
        out = []
        for row in range(0, len(a)):
            if r != row:
                out.append([])
                for col in range(0, len(a[0])):
                    if col != c:
                        out[-1].append(a[row][col])
        return out

2 个回答

1

在你主程序中导入 matrixlib 之后:

print(repr(matrixlib))
raise SystemExit

检查一下实际加载的模块的位置。

6

我觉得当你第一次安装你的包的时候,你可能是用:

python setup.py install

而不是:

python setup.py develop

因为当你使用 setup.py install 的时候,setup.py 只是把包的文件复制到系统路径里。所以每次你对包的文件做了修改后,都需要重新运行 setup.py install

而使用 setup.py develop 则是以“开发模式”安装你的包,这意味着它只是创建了一个链接(一个 eggs)指向你“本地”的包文件。所以对库的“本地”文件的任何更改都会被检测到(因为它只是一个链接)。

希望这能帮到你 :)

撰写回答