【发布时间】:2019-01-26 03:42:10
【问题描述】:
我正在创建一个库以供跨多个应用程序使用。它由“main”包中的一组抽象基类和一系列可重用的 Django 应用程序组成。
mylib-core 中的文件:
- mylib/__init__.py
- mylib/models.py
- mylib/serializers.py
- mylib/viewsets.py
mylib-auth 中的文件:
- mylib/auth/__init__.py
- mylib/auth/models.py
- mylib/auth/serializers.py
- mylib/auth/viewsets.py
这是两个要分开打包的库,其中mylib-auth依赖于mylib-core,mylib-auth中的类派生自mylib-core中的类
我遇到的问题是,在为mylib-auth 运行测试运行程序时,找不到mylib-core 的文件。我已将mylib-core 包安装到mylib-auth 的virtualenv 中。
我认为这与我的嵌套包结构有关 - 我在两个包中都有一个 mylib 文件夹。似乎 python 只在包含 auth 子文件夹的父 mylib 目录中查找文件,而忽略了 venv/lib/.../mylib 目录中的文件。
这会导致以下错误:
当我尝试为mylib-auth 运行我的测试套件时,我收到一个错误,即找不到应用程序mylib.auth,因为mylib 没有属性auth - 尽管已将mylib-core 安装到我的virtualenv 中。在 auth 包中的 mylib 目录下添加 __init__.py 可以解决此问题(但显然不应该存在,因为该文件是在我的核心包中定义的)。在此之后我收到ImportError: No module named 'mylib....' 错误。
测试和部署嵌套包的适当方法是什么?
【问题讨论】:
标签: django python-3.x django-apps python-packaging