0

假设vtk我的 Python 站点包中有模块,并且我想从具有自己的 Python 发行版的应用程序中访问该模块。

我尝试了几件事,例如:

import sys
sys.path.append("C:\Python27\Lib\site-packages")
sys.path.append("C:\Python27\Lib\site-packages\vtk")
import vtk
lut = vtk.vtkLookupTable()

但它无法正确加载模块:

AttributeError: 'module' object has no attribute 'vtkLookupTable'

如果我从默认的 Python 解释器做同样的事情,一切都很好。

现在我想vtk用简单的解析路径在这个应用程序站点包中制作一个包装器__init__.py,这样当我这样做时,import vtk它有望加载正确的东西,但我没有使用 Python 包的经验来尝试使这项工作

简而言之,如何通过创建与引用包和简单__init__.py文件同名的文件夹来将任意文件夹中的模块包装在 Python 站点包中?

4

2 回答 2

3

删除这些行:

sys.path.append("C:\Python27\Lib\site-packages")
sys.path.append("C:\Python27\Lib\site-packages\vtk")

site-packages已经在您的 python 路径上。在该 python 路径中添加一个包/文件夹(尤其是在第一级),只会弄乱您的导入。这个vtk包的结构是怎样的?

/path/to/site-packages/
                      vtk/
                          __init__.py
                          vtk.py

在这种情况下,要访问 vtk 中的函数:

from vtk import vtk
lut = vtk.vtkLookupTable()

这一切都取决于文件夹的排列方式。你也可以这样做:

import vtk
lut = vtk.vtk.vtkLookupTable()

不要仅仅因为你不了解 python 导入是如何工作的,就试图通过创建代理模块来破解 python 导入。错误很明显。无论您导入什么,该属性vtkLookupTable都不存在。你输入了错误的东西。修理它。

您应该非常非常非常少需要sys.path手动操作。当你必须这样做时,你应该知道这是正确的理由——不要解决你不完全理解的事情。

当我第一次开始使用 python 时,我遇到了 python 路径的问题。这可能令人沮丧,但了解它的工作原理是必要的。可以帮助您的是以下内容:

import vtk
print dir(vtk)

这将打印 vtk 的属性,因此在您认为导入正确的东西的情况下,您可以准确地探索包或模块中的内容。

重新阅读您的问题后,这似乎是您正在谈论的不同 python 安装。答案是将此包安装到其他 python 安装中,或者通过将文件夹复制到应用程序的根级别来将此包作为顶级导入。

于 2012-06-23T02:12:46.167 回答
0

"C:\Python27\Lib\site-packages"已经在您的 python 路径上。所以附加路径是不必要的。消除:

import sys
sys.path.append("C:\Python27\Lib\site-packages")
sys.path.append("C:\Python27\Lib\site-packages\vtk")

在 中创建一个名为 ' vtk\'的新文件夹,然后创建一个名为in"C:\Python27\Lib\site-packages"的新 python 文件并将您自己的模块放在此目录中。使用:__init__.py"C:\Python27\Lib\site-packages\vtk"vtk.py

import vtk

或者

from vtk import vtk

使用您自己的模块。

于 2012-06-23T03:06:46.090 回答