【发布时间】:2016-01-08 20:26:05
【问题描述】:
使用setup.py 安装我的python 项目并在终端中执行它后,我收到以下错误:
...
from ui.mainwindow import MainWindow
File "/usr/local/lib/python2.7/dist-packages/EpiPy-0.1-py2.7.egg/epipy/ui/mainwindow.py", line 9, in <module>
from model.sir import SIR
ImportError: No module named model.sir
...
我们假设我们的项目cookies具有以下结构:
.
├── setup.py
└── src
├── a
│ ├── aa.py
│ └── __init__.py
├── b
│ ├── bb.py
│ └── __init__.py
├── __init__.py
└── main.py
文件:cookies/src/main.py
from a import aa
def main():
print aa.get_aa()
文件cookies/src/a/aa.py
from b import bb
def get_aa():
return bb.get_bb()
文件:cookies/src/b/bb.py
def get_bb():
return 'bb'
文件:cookies/setup.py
#!/usr/bin/env python
import os
import sys
try:
from setuptools import setup, find_packages
except ImportError:
raise ImportError("Install setup tools")
setup(
name = "cookies",
version = "0.1",
author = "sam",
description = ("test"),
license = "MIT",
keywords = "test",
url = "asd@ads.asd",
packages=find_packages(),
classifiers=[
"""\
Development Status :: 3 - Alpha
Operating System :: Unix
"""
],
entry_points = {'console_scripts': ['cookies = src.main:main',],},
)
如果我将cookies 安装为root 和$ python setup.py install 并执行cookies,我会收到以下错误:ImportError: No module named b。我该如何解决这个问题。
【问题讨论】:
-
您要导入的包(或其父目录)是否在 PYTHONPATH 中?
-
不,只有
['', '/usr/local/lib/python2.7/dist-packages/EpiPy-0.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/peppercorn-0.5-py2.7.egg', ...]。 EpiPy-0.1-py2.7.egg 文件夹包含以下包:EGG-INFO和epipy` -
docs.python.org/2.5/whatsnew/pep-328.html你必须使用
from .model.sir import SIR -
@JBChouinard 这是错误:
Traceback (most recent call last): File "main.py", line 5, in <module> from ui.mainwindow import MainWindow File "/home/sam/Documents/workspace/EpiPy/epipy/ui/__init__.py", line 4, in <module> from mainwindow import MainWindow File "/home/sam/Documents/workspace/EpiPy/epipy/ui/mainwindow.py", line 9, in <module> from .model.sir import SIR ImportError: No module named model.sir -
哦,是的,如果您在模型子包中,.model 可以工作。由于您在 ui 中,因此您必须使用 ..model (两个点)。它就像 Unix 相对路径一样工作。不过,推荐的用法是在任何地方使用绝对导入。
标签: python pip python-import easy-install