我正在尝试为一组可重用的 API 创建 PIP 包。我已经在一个项目中实现了这些 API 并且工作得很好。
我开始寻找打包这些 API 的方法,以便它可以与任何其他项目集成,这就是我了解 setuptools
的方式。为了获得一 pip setuptools
的实际使用经验,我只是为 helloworld()
程序创建了一个 PIP 包。
现在,我已开始为 DRF 应用程序中的 API 创建包。我创建了一个空目录,并将该 DRF 应用程序的所有模块移至该目录中。 setup.py
文件经过良好配置,可以安装这些模块所需的依赖项。
但是,现在我想启动这个应用程序,看看它是否正常工作。因此,当我运行 python manage.py runserver
时,由于一个明显的原因,它不起作用 - 没有这样的文件或目录。
此外,该包需要某些配置才能工作,在我之前的项目中,它是在 settings.py 文件中定义的。
setup.py
import os
from setuptools import setup, find_packages
# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
def get_doc():
with open("README.md", "r") as fh:
return fh.read()
setup(
name="django_restframework_2fa",
version="0.0.1",
description="Some description",
long_description=get_doc(),
long_description_content_type="text/markdown",
url="https://github.com/jeetpatel9/django-restframework-2fa.git",
py_modules=['helloworld'],
package_dir={'': 'some_dir'},
author='Jeet Patel',
author_email='****@gmail.com',
python_requires='>=3.7',
include_package_data=True,
zip_safe=False,
packages=find_packages(
exclude=['tests', 'tests.*', 'licenses', 'requirements']),
classifiers=[
"Environment :: Web Environment",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Framework :: Django",
"Framework :: Django :: 3.1",
"Framework :: Django :: 3.2",
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Topic :: Internet :: WWW/HTTP',
],
install_requires=[
"djangorestframework",
"django",
"djangorestframework-simplejwt",
"pyjwt",
"twilio==6.55.0",
"djangorestframework-simplejwt==4.6.0",
"django-phonenumber-field==5.2.0",
"phonenumbers==8.12.24",
],
extra_requires={
"dev": [
"pytest>=3.7",
"twine 3.4.1",
]
}
)
我在互联网上到处寻找以了解如何 -
- 在开发 PIP 包时定义
settings.py
文件。 - 启动此软件包进行开发和测试。
对文章或教程的任何引用也对我有用。
这个社区是我最后的希望。
最佳答案
pip 包将仅包含要在其他项目中重复使用的应用程序文件;所以,是的,每次需要运行和测试包时都构建一个包,效率非常低。
一种解决方案是在您的工作目录中创建一个 tests 项目,并编写您需要的任何测试文件( View 、url、设置等)并将它们放入测试中。让我展示一个示例结构:
product_management ## working directory
├─ .gitignore
├─ README.md
├─ manage.py
├─ setup.cfg
├─ setup.py
├─ tests ## tests project
│ ├─ __init__.py
│ ├─ asgi.py
│ ├─ requirements.txt
│ ├─ settings.py
│ ├─ urls.py
│ ├─ views.py
│ └─ wsgi.py
└─ product_app ## re-usable app
├─ __init__.py
├─ admin.py
├─ apps.py
├─ migrations
│ ├─ 0001_initial.py
│ └─ __init__.py
├─ models.py
├─ serializers.py
└─ views.py
请记住,您可以在不使用任何应用程序的情况下编写整个 django 项目;我们在这里使用我们的测试项目来执行此操作。这也可以作为有关如何将这些可重用 API 集成到其他项目中的文档。根目录中的manage.py可用于启动tests项目。
现在,由于 tests 文件夹在技术上在 pip 包内没有用处,因此可以通过如下定义将其排除:
setup.py
from setuptools import setup, find_packages
setup(
packages=find_packages(exclude=("tests",)),
)
您可以通过查看 pypi.org 上列出的各种开源包的 github 存储库来了解更多信息。 .
关于python - 编写 DRF 可重用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67857883/