无法从已安装的模块加载类

时间:2015-11-30 16:21:37

标签: python module packages setuptools

我正在使用Python 3开发一个项目,我想将其打包为Python模块,以便将其作为库安装到我们的机器上。但是我在安装后导入模块时遇到问题,所以让我给你看一下代码

├── README.txt
├── setup.py
├── virt_template
│   ├── debian
│   │   └── interfaces
│   ├── debian_platform.py
│   ├── __init__.py
│   ├── virt_template.py
│   └── test
│       ├── __init__.py
│       └── virt_template_test.py

这是setup.py内容

from setuptools import setup, find_packages

setup(
    name = "virt_template",
    packages = find_packages(),
    package_data = {"virt_template" : ["debian/*"]},
    version = "1.0.0",
    author = "Petr Mensik",
    author_email = "petr.mensik@mail.cz",
    classifiers = [
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Intended Audience :: Developers",
        "Operating System :: Linux",
        "Topic :: Software Development :: Libraries :: Python Modules",
    ]
)

现在,当我运行python3 setup.py install时,模块已正确安装到/usr/local/lib/python3.4/dist-packages/virt_template-1.0.0-py3.4.egg/virt_template,文件夹结构如下

├── debian
│   └── interfaces
├── debian_platform.py
├── __init__.py
├── virt_template.py
└── test
    ├── __init__.py
    └── virt_template_test.py

到目前为止,这对我来说似乎是对的。但是当我做的时候

from virt_template import VirtualMachine 

我得到cannot import name VirtualMachine。所以我试过

from virt_template.virt_template import VirtualMachine 

,结果是No module named 'debian_platform' - 这可能是指debian_platform.py个文件。

那么我做错了什么?

1 个答案:

答案 0 :(得分:1)

在你的情况下,正确的导入是

from virt_template.virt_template import VirtualMachine 

您的问题是从virt_template.py导入相关模块的方式。你应该做

from . import debian_platform

from virt_template import debian_platform

麻烦的根本原因是在测试代码时设置在virt_template目录内的pythonpath,以及在安装setuptools后使用的site_packages库目录