주피터를 설정하려면 어떻게 해야 하나요장고를 위한 아이피톤 노트북?
주피터를 설정하려면 어떻게 해야 하나요장고를 위한 아이피톤 노트북?
나는 장고와 잘 놀 수 있도록 IPython 노트북을 설정하기 위해 에 설명된 방법을 사용해 왔다. 이 방법의 요지는 DJANGO_SETTINGS_MODULE을 설정하고 DJANGO를 실행하는 IPython 확장자를 만드는 것이다.ipython이 시작되면 setup()을 클릭합니다.
확장 코드는 다음과 같습니다:
def load_ipython_extension(ipython):
# The `ipython` argument is the currently active `InteractiveShell`
# instance, which can be used in any way. This allows you to register
# new magics or aliases, for example.
try:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
import django
django.setup()
except ImportError:
pass
최근 Jupyter 노트북으로 업그레이드하면서 이 설정이 깨졌습니다. 나는 노트북의 첫 번째 셀에 비슷한 코드를 추가하여 주피터 노트북에서 장고 코드를 실행할 수 있다. 그러나 Jupyter가 확장을 자동으로 실행하도록 하는 방법을 찾을 수 없었기 때문에 만드는 모든 노트북에 대해 이 작업을 다시 수행할 필요가 없었습니다.
장고와 주피터가 잘 놀려면 어떻게 해야 하나요?
@DarkLight의 경우 - 나는 Jupyter 1.0.0과 함께 Django 1.8.5를 사용하고 있다. 노트북에서 실행하는 코드는 다음과 같습니다:
import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsfile")
import django
django.setup()
설치 위치
pip install django-extensions
'django-extensions'를 포함하도록 설정 파일 변경
INSTALLED_APPS += ['django_extensions']
다음과 같이 Django 서버를 실행합니다:
python manage.py shell_plus --notebook
양복으로 바꾸고, 이것을 당신의 첫 번째 감방에서 실행하세요
import os, sys PWD = os.getenv('PWD') os.chdir(PWD) sys.path.insert(0, os.getenv('PWD')) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "local_settings.py") import django django.setup()
이제 당신은 당신의 장고 모델 등을 수입할 수 있을 것입니다. 예:
from app.models import Foobar Foobar.objects.all()
다음은 win10, 파이썬 3.5, 장고 1.10을 사용하는 데 사용할 수 있습니다:
- Anaconda 배포판과 함께 Python을 설치하여 함께 설치합니다
설치 및 설치:
pip install Django pip install django-extensions
새로운 장고 프로젝트를 시작합니다. 나중에 주피터가 액세스할 수 있는 디렉터리 트리의 해당 부분에서 그렇게 해야 합니다.
django-admin startproject _myDjangoProject_
JYPter 시작
- Jupyter를 디렉토리로 이동하고 첫 번째/위쪽 디렉토리를 입력합니다
- 첫 번째/맨 위 디렉토리에서 새 Jupyter 노트를 시작합니다:
다음 코드를 입력하고 실행합니다:
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myDjangoProject.settings") import django django.setup()
이 코드는 의 코드와 동일하며, "myDjango Project"를 참조하십시오.settings"는 다음을 가리킴
이제 다음과 같은 예로 시작할 수 있습니다.
from django.template import Template, Context template = Template('The name of this project is {{ projectName }}') context = Context({'projectName': 'MyJypyterDjangoSite'}) template.render(context)
사실 당신은 () 그 모든 것을 해야 한다는 것이 밝혀졌습니다. 그냥 장고 확장을 설치하고 주피터를 실행하세요!
(myprojectvenv)$ cd myproject
(myprojectvenv)$ pip install jupyter
(myprojectvenv)$ pip install django-extensions
(myprojectvenv)$ jupyter notebook
브라우저에서 새로운 "Django Shell-Plus"를 시작합니다:
그리고 당신은 가도 좋아요. 예:
from myproject.models import Foobar
Foobar.objects.all()
이게 바로 내게 효과가 있었던 거야
- (나는 1.9.6을 사용했다) 다른 답에 따라
- 주피터를 설치하다
- 내 도커 컨테이너 안에 주피터를 설치하기 위해 했던 몇 가지 작업들 - 이것이 당신에게 적용되는지 아래를 참조하십시오. »
- 기본 Django 디렉터리에서 노트북 디렉터리를 만듭니다.
- 해당 디렉토리로 이동
- 디렉토리 내부에서 django extensions shell_plus를 시작합니다: 노트북 서버가 실행 중이어야 하며 새 브라우저를 시작할 수 있습니다. 브라우저 창이 실행되지 않으면 지침에 따라 링크 또는 토큰을 붙여넣으십시오.
- 브라우저에서 John Me의 답변 스크린샷에 따라 새 "Django Shell Plus" 노트북을 엽니다
, 중요한 것은 노트북 환경에서 디렉토리를 변경하는 작업이었습니다. 실행된 디렉터리에 없는 노트북으로 작업하려고 하면 커널이 올바르게 구성되지 않았습니다. 한 번에 하나의 디렉토리에만 노트북을 구성하는 것만으로도 충분했습니다. 보다 강력한 솔루션이 필요한 경우 주피터를 시작하기 전에 설정할 수 있습니다. 예를 들어 virtualenvivate 스크립트에 추가합니다. 근데 이거 안 먹어봤어요.
† 도커 설정(옵션)
- 포트 8888에 대한 컨테이너의 포트 매핑 추가
예를 들어 도커에서 파일을 작성합니다;
ports:
- "8890:8888"
- ip 0.0.0.0을 사용하도록 프로젝트 설정 파일 구성
제가 한 일은 이렇습니다:
NOTEBOOK_ARGUMENTS = [
'--ip', '0.0.0.0',
'--allow-root',
'--no-browser',
]
완전성을 위해(하지만 2018년이기 때문에 이 질문이 게시된 이후로 상황이 변경되었을 수 있습니다): 실제로 다른 Jupyter 서버/환경(위젯, 확장 기능을 설치하고 테마를 변경한 환경)을 연결(실행)하는 Jupyter Python 커널을 Django 환경에 설치할 수 있습니다. 지금은 여전히 필요한 작업의 일부만 수행합니다. :-)
이것은 당신이 장고의 것과 분리되고 커널/확장이 설치된 주피터 가상 환경을 가지고 있다고 가정합니다. 모든 주피터 확장(및 그 종속성)은 장고의 것이 아닌 이 venv에 설치됩니다(장고 환경에서 함께 사용해야 하는 경우 판다, 매트플롯립 등이 여전히 필요할 것입니다) 장고 코드 포함).
Django 가상 환경(버전 2 인터프리터를 포함한 다른 버전의 파이썬을 실행할 수 있음)에서 ipython 커널을 설치합니다:
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
이것은 당신의 사용자의 주피터 커널 디렉터리에 지정된 --이름을 가진 커널 구성 디렉터리를 만들 것이다. 이 커널은 생성 시 활성화되었던 것을 가상 환경 내에서 실행하므로 정확히 동일한 버전의 파이썬과 우리의 장고 프로젝트에서 사용되는 모든 설치된 모듈을 사용한다.
실행은 매우 유사한 작업을 수행하지만 현재 venv에 설치된 모든 것(Jupyter 서버 및 모든 확장 포함)이 필요할 뿐만 아니라 프로젝트의 루트(포함된 디렉토리)와 다른 디렉토리에서 노트북을 실행할 수 없습니다. 또한 가상 환경의 것이 아닌 경로에서 찾은 파이썬이라는 첫 번째 실행 파일을 사용하여 커널을 실행하므로 활성 Django 가상 환경 내의 명령줄에서 시작하지 않으면 잘못된 동작이 발생합니다.
이러한 문제를 해결하여 우리가 구성한 모든 장고 프로젝트 내에서 실행되는 노트북을 만들고 파일 시스템의 어디에서나 저장된 노트북을 실행할 수 있도록 하려면 다음이 필요합니다:
- 첫 번째 'pythonv' 매개 변수에 가상 환경에 포함된 python 인터프리터의 전체 경로가 포함되어 있는지 확인하십시오
- 셸 환경 변수를 포함할 'env' 섹션을 추가(아직 존재하지 않는 경우)한 다음, 이 섹션을 사용하여 Python에게 프로젝트를 찾을 위치와 사용할 장고 설정을 알려줍니다. 다음과 같은 기능을 추가하여 이 작업을 수행합니다:
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
}
- 옵션: 'display_name'을 사람에게 친숙하도록 변경하고 아이콘을 바꿉니다.
이 환경 kernel.json 파일을 편집하면 유사한 내용을 볼 수 있습니다:
{
"display_name": "My Project",
"language": "python",
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
},
"argv": [
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
]
}
주목할 만한 행:
: 일반적으로 프로젝트의 관리 내부에서 볼 수 있는 설정입니다.파이의
: PYTHONPATH는 프로젝트의 주 디렉터리(관리가 포함된 디렉터리)를 포함하도록 확장되었습니다.py) 커널이 정확한 디렉터리에서 실행되지 않더라도 설정을 찾을 수 있도록(여기서 jango_extensions는 제네릭을 사용하므로 전체 Jupyter 서버가 내부에서 실행되지 않는 한 잘못된 가상 환경을 실행합니다. django_extensions에 의해 생성된 kernel.json에 이것을 추가하면 장고의 어디에서나 노트북을 실행할 수 있습니다 프로젝트 디렉터리)
: 커널 실행의 첫 번째 인수(argv 목록)는 프로젝트의 가상 환경의 파이썬 인터프리터에 대한 전체 경로여야 합니다(이것은 django_extensions가 잘못되는 또 다른 문제입니다: 이것을 수정하면 노트북 서버가 설치된 모든 모듈과 함께 특정 Django 환경의 커널을 실행할 수 있습니다)
: 이것은 노트북에 'shell_plus' 기능을 로드하는 확장입니다(선택 사항이지만 유용합니다 :-)
제가 하는 것처럼 장고레시피와 함께 사용하는 매우 희귀한 개발자들을 위해, 저는 RobM의 완전한 자료에 약간의 정보를 추가할 것입니다... 나는 그것을 사용하기 때문에 jupyter lab을 참조하지만 모든 정보는 오래된 jupyter 노트북에 적용될 수 있다고 생각한다.
빌드아웃을 사용할 때는 'manage.py' 대신 'bin/django' 핸들러를 사용하게 됩니다. 그것이 전체 경로를 정의하는 스크립트입니다. buildout.cfg에서 한 부분을 더 추가했습니다:
[ipython]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
extra-paths = ${buildout:directory}/apps
initialization = import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'web.settings'
디렉터리에 이름이 지정된 다른 스크립트가 생성되도록 합니다. 나는 그 통역사에게 커널 스펙을 가리켰다. 게다가 나는 내가 사용하는 커널 정의가 다음과 같도록 하기보다는 인수를 사용한다:
{
"argv": [
"/misc/src/hg/siti/trepalchi/bin/ipython",
"kernel",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
],
"display_name": "Trepalchi",
"language": "python"
}
ipython 스크립트가 생성되는 방식 때문에 제 경우에는 환경 변수를 추가할 필요가 없습니다.
Rob이 이미 언급했듯이 jupiterlab은 내가 다음 명령을 사용하여 시작하는 한 환경에만 설치됩니다:
jupyter lab
내가 설치만 하는 장고 프로젝트의 환경에는 없다(이미 20개의 종속성이 있다).
저는 프로젝트가 꽤 많은 편이기 때문에 프로젝트에 쉽게 접근할 수 있도록 프로젝트에 대한 많은 링크로 시작하는 단일 지점을 갖는 것이 유용하다고 생각합니다. django_extension이 제공하는 확장 덕분에 노트북을 초기화하는 데 추가 셀이 필요하지 않습니다.
이러한 방식으로 추가된 단일 커널은 다음 명령을 사용하여 찾을 수 있다:
jupyter kernelspec list
그리고 주피터 연구소의 발사대에 명확하게 기재되어 있다
Python 3.7과 Django 2.1을 사용하고 있습니다. 첫 번째 셀에서 아무것도 실행할 필요가 없습니다. Django 프로젝트의 루트에 노트북이 있는 것을 개의치 않는 한 매력적으로 작동합니다.
프로젝트에 대한 사용자로 가정하고 활성화됩니다. 나는 가상 환경을 만들고 파이썬 프로젝트의 종속성을 추적하는 데 사용하지만, 어떤 도구를 사용하는지는 당신에게 달려 있다.
그것은 또한 당신의 것으로 가정된다.
단계
설치하다
파이프 사용
pip install jupyter
pipenv 사용
pipenv install jupyter
설치하다
파이프 사용
pip install django-extensions
Using pipenv
pipenv install django-extensions
Set up
django-extensions
by adding it to theINSTALLED_APPS
setting of your Django projectsettings.py
file.:INSTALLED_APPS = ( ... 'django_extensions', )
Run the
shell_plus
management command that is part ofdjango-extensions
. Use the option--notebook
to start a notebook:python manage.py shell_plus --notebook
Jupyter Notebooks will open automatically in your browser.
Start a new Django Shell-Plus notebook
That's it!
Again, you don't have to run anything in the first cell, and you can corroborate by running dir()
to see the names in the current local scope.
Edit:
If you want to put your notebooks in a directory called notebooks
at the root directory, you can do the following:
$ mkdir notebooks && cd notebooks
$ python ../manage.py shell_plus --notebook
Thanks to Mark Chackerian whose answer provided the idea to make run the notebooks in a directory other than the project's root.
These are the modules that are imported automatically thanks to shell_plus
:
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When, Exists, OuterRef, Subquery
from django.utils import timezone
from django.urls import reverse
While the accepted answer from RobM works, it was less clear than it could be and has a few unnecessary steps. Simply put, to run notebooks through Django from a notebook environment outside of the project directory:
Install:
pip install django-extensions
Add 'django-extensions'
to your INSTALLED_APPS
list in settings.py
INSTALLED_APPS += ['django_extensions']
Run a notebook from within Django, then close it:
python manage.py shell_plus --notebook
This will create your kernel, which we will now edit to point to an absolute path of Python rather than a relative path.
On OSX, the kernel file is at: ~/Library/Jupyter/kernels/django_extensions/kernel.json
On Linux: ~/.jupyter/kernels/django_extensions/kernel.json
We only need to make two changes:
The first is to edit the first value in the "argv"
list from "python"
to the full address of the python version in your Django virtual environment. E.g.: "/Users/$USERNAME/Documents/PROJECT_FOLDER/venv/bin/python"
Secondly, to the "env"
dictionary, add "DJANGO_SETTINGS_MODULE": "mysite.settings",
where mysite
is the folder that contains your Django settings.
Optionally, change the value of "display_name"
.
Now when you run a notebook from any directory, choosing the "Django Shell-Plus"
kernel will allow your notebooks to interact with Django. Any packages such as pandas will need to be installed in the Django venv.
Run this command.
PYTHONPATH=/path/to/project/root DJANGO_SETTINGS_MODULE=settings python manage.py shell_plus --notebook