假设我的Python站点包中有vtk
个模块,而且我想要访问这个模块的应用程序。
我尝试了几件事:
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站点包中从任意文件夹中包装模块?
答案 0 :(得分: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安装中,或者通过将文件夹复制到应用程序的根级别将此软件包作为顶级导入包含。
答案 1 :(得分: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\
'的新文件夹。在"C:\Python27\Lib\site-packages"
中,然后在__init__.py
中创建一个名为"C:\Python27\Lib\site-packages\vtk"
的新python文件,并将您自己的模块vtk.py
放在此目录中。
使用:
import vtk
或
from vtk import vtk
使用您自己的模块。