目标是创建Django项目的pip包。
目标是通过执行 pip install
使 Web 应用程序可以快速安装在任何地方。
我能想到的用例有 2 个:
使用 console_scripts(例如
client-web-up
)手动启动应用程序,该脚本应与manage.py runserver
类型等效。 这就是我现在关注的重 pip 。创建某种脚本来生成 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/