Ubuntu找不到包含__init__.py的模块目录

时间:2016-02-16 10:11:29

标签: python python-2.7 ubuntu module

我有一个具有以下结构的python项目:

/project
  /bin  
     executable      
  /app  
     __init__.py
     a.py
     b.py
     c.py

/project目录中,我尝试运行可执行文件,这取决于app包中的模块:

./bin/executable

然而,当我尝试这个时,python无法找到应用包中定义的任何模块,导致ImportError: No module named XYZ错误。

根据我的理解,__init__.py目录中app的存在应该将其标记为模块?

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您将以下内容添加到可执行文件中(在尝试导入应用程序模块之前):

import sys; print sys.path
...
import app

您将看到当前工作目录未包含在路径中。我建议你通过添加setup.py文件来创建一个合适的Python包。然后,您可以安装您的软件包,您的可执行文件应该可以正常工作。

这是一个简单的setup.py文件:

from setuptools import find_packages, setup

config = {
    'name': 'app',
    'version': '0.1.0',
    'description': 'some app',
    'packages': find_packages(),
}

setup(**config)

我更喜欢安装到virtualenv:

virtualenv venv
source venv/bin/activate
python setup.py install
./bin/executable

现在,如果您停用该virtualenv并尝试再次运行您的可执行文件,您将获得原始ImportError

花几分钟时间阅读Python Packaging User Guide

此外,您可能希望使用python setup.py develop代替python setup.py install