django - pip打包一个django项目

标签 django python-3.x pip setuptools

目标是创建Django项目的pip包。

目标是通过执行 pip install 使 Web 应用程序可以快速安装在任何地方。

我能想到的用例有 2 个:

  1. 使用 console_scripts(例如 client-web-up)手动启动应用程序,该脚本应与 manage.py runserver 类型等效。 这就是我现在关注的重 pip 。

  2. 创建某种脚本来生成 apache、nginx 等的配置文件......供以后使用。

采取的步骤

  • 为我的 pip 包创建了一个主文件夹 client_web
  • 将我的所有项目移至 client_web 文件夹中。
  • 创建了一个 setup.py,如下所示。
  • 编辑了manage.py 文件,以便其内容可以由名为entry() 的函数执行。
  • 发布正确下载并安装的pip包。

    from setuptools import setup
    
    setup(
      name="client-web",
      ...,
      version="2018.08.03.3",
      packages=[
        "client_web",
        "client_web.controller",
        "client_web.measurement",
        "client_web.webapp",
        "client_web.controller.migrations",
        "client_web.measurement.migrations",
      ],
      include_package_data=True,
      install_requires=[
        ...
      ],
      entry_points={
        "console_scripts": [
          "client-web-up=client_web.manage:entry"
        ]
      }
    )
    

问题

如果我在终端中输入以下内容:

$ client-web-up

Traceback (most recent call last):
  File "/usr/local/bin/client-web-up", line 26, in <module>
    sys.exit(entry())
  File "/usr/local/lib/python3.7/site-packages/client_web/manage.py", line 33, in entry
    main();
  File "/usr/local/lib/python3.7/site-packages/client_web/manage.py", line 30, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 377, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 352, in execute
    django.setup()
  File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 89, in populate
    app_config = AppConfig.create(entry)
  File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 116, in create
    mod = import_module(mod_path)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'webapp'

但如果我这样做:

$ pip3 show client-web

  Name: client-web
  Version: 2018.8.3.3
  Location: /usr/local/lib/python3.7/site-packages
  Requires: ...
  Required-by: ...

$ python3 /usr/local/lib/python3.7/site-packages/client_web/manage.py 

  Available subcommands:

  [auth]
      changepassword
      createsuperuser

  [contenttypes]
      remove_stale_contenttypes

  [django]
      ...

有人可以帮我找到一种使 console_script 工作的方法吗?

最佳答案

通过添加 sys.path 来解决,如下所示:

sys.path.append(os.path.dirname(os.path.realpath(__file__)))

关于django - pip打包一个django项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676309/

相关文章:

javascript - forms.DateInput 默认值

django - 如何从 Django Form FileField 中提取文件对象

python-3.x - 在 ubuntu 20.04 中的 python 3.8 上安装 Jupyter Notebook

python - 升级的 python ;我是否必须手动重新安装所有站 pip 包?

python - 不使用 virtualenv 时安装包的位置

python - Django 转储数据 django.contrib.auth

django - React Django REST 框架 session 不持久/工作

python - Tkinter Python 中的文本动画?

python - Django BinaryField 检索为内存位置?

python - 使用pytorch出现DLL文件错误