包装后Python子模块不可见

时间:2016-04-19 14:40:11

标签: python

我一直试图用setup.py打包我的项目,但是遇到了障碍。

我的文件结构如下:

root/
  mypackage/
     __init__.py
     mysubmodule1/
        __init__.py
     mysubmodule2/
        __init__.py

我在setup.py,

中使用了以下配置
from setuptools import setup, find_packages
# To use a consistent encoding
from os import path
import glob

here = path.abspath(path.dirname(__file__))

print(find_packages(exclude=['docs', 'tests*']))
setup(
    name='mypackage',
    packages=find_packages(exclude=['contrib', 'docs', 'tests*']),
    install_requires=[...],
    scripts=[...],
)

我在virtualenv中使用 python setup.py install 构建包,我打印的调试行显示find_packages位于我所有的pacakges。

['mypackage', 'mypackage.submodule1', 'mypackage.submodule2']

当我导入我的包时,我试图导入 mypackage.submodule1.class ,但这引发了一个未找到模块的异常。 我检查了所有模块都在virtualenv site-packages的输出egg中,并且我可以导入我的root包。

dir(mypackage)的输出如下:

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mypackage
>>> dir(mypackage)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__']

我错过了什么吗?我引用的所有开源项目都遵循这种模式。 感谢

1 个答案:

答案 0 :(得分:0)

找到了解决方法。似乎只运行setup.py并没有打包我的所有文件并使其可见。

所以我在两个阶段运行我的本地设置,以获取我的python环境中的所有文件。

第一个命令将创建一个包含dist文件夹中所有文件的发行版。

$ python setup.py sdist

$ tree dist
dist
├── TrainingDataAgent-0.0.1-py2.7.egg
└── TrainingDataAgent-0.0.1.tar.gz

$ pip install  dist/TrainingDataAgent-0.0.1.tar.gz  

这允许我的调用程序正确找到我的python包的所有文件。