Ana*_*and 5 packages django-orm
版本:
我有一个使用django作为ORM的包(mypkg).
我想在客户端脚本(client/myclient/main.py)中使用该包.
我能够直接在客户端应用程序中使用Django ORM - 问题是当我想在多个客户端应用程序使用的包中使用它时.
包裹代码如下:
# ./mypkg_wrapper/mypkg/mypkg/settings.py
INSTALLED_APPS = [
'django.contrib.contenttypes',
'myapp',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
SECRET_KEY = '...'
# mypkg/myapp/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
# mypkg_wrapper/setup.py
#!/usr/bin/env python
import os
from setuptools import find_packages, setup
# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='mypkg',
version='0.0.1',
packages=find_packages(),
include_package_data=True,
description='A django ORM package.',
install_requires=['django', 'pytz']
)
Run Code Online (Sandbox Code Playgroud)
我运行makemigrations,迁移以设置数据库.
我跑了python setup.py sdist,创造了mypkg_wrapper/dist/mypkg-0.0.1.tar.gz
客户代码:
# myclient/settings.py
INSTALLED_APPS = [
'django.contrib.contenttypes',
'mypkg.myapp',
]
SECRET_KEY = '...'
# myclient/main.py
if __name__ == '__main__':
import os
from os.path import abspath, dirname, join
import sys
import django
sys.path.append(join(abspath(dirname(__file__)), '..'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
django.setup()
import mypkg.myapp
Run Code Online (Sandbox Code Playgroud)
在客户端venv中,我跑了pip install ../mypkg_wrapper/mypkg-0.0.1.tar.gz,似乎成功安装了mypkg包.
然后我尝试运行,python myclient/main.py并在尝试导入mypkg.myapp时出现以下错误.
ModuleNotFoundError: No module named 'mypkg'
mypkg包在客户端的venv中:
$ pip list
Django (2.0.3)
mypkg (0.0.1)
pip (9.0.1)
pytz (2018.3)
setuptools (28.8.0)
Run Code Online (Sandbox Code Playgroud)
我在这里看到了类似的问题,但没有一个答案解决了这个问题.
我试过/考虑了几件事:
import mypkg在main.py- 相同的错误mypkg而不是mypkg.myapp在客户端INSTALLED_APPS- 相同的错误您是否检查过您的应用程序是否出现在 venv 安装的软件包文件夹中?应该是这样的
.../venv/lib/python3.5/site-packages
Run Code Online (Sandbox Code Playgroud)
如果存在,请检查文件,看看是否有奇怪的东西。如果不存在,则该软件包未安装。
编辑:当然你的Python文件夹可能是3.6