PoolC / Yuzuki

PoolC 홈페이지 제작 프로젝트
https://poolc.org/
MIT License
10 stars 9 forks source link

make requietments.txt for development #54

Open Perlmint opened 9 years ago

Perlmint commented 9 years ago

requirements를 release버전과 develop버전으로 나누는게 좋을 듯 개발 환경을 위해서 기본으로 sqlite로 설정 되어있는데도 로컬 개발 환경에서는 필요없는 mysql라이브러리 설치하다가 실패가 뜸.

TintypeMolly commented 9 years ago

일단은 mysql은 wheel로 설치하면 되고. 그다지 필요 없을 것같은데... 윈도에서만 생기는 문제 아님? 혹시 requirements.txt OS별 대응 가능하다던가 한가? 파일 늘리는거면 반대고 아니라면 찬성.

Perlmint commented 9 years ago

맥에서도 오류 떴던 것 같은데

조금 꼼수를 부려서 python스크립트로 설치하게 하면 어떨까나

import pip

req_list = ['Jinja2==2.7.3',
                 'MySQL-python',
                 'SQLAlchemy==0.9.8',
                 'Twisted==14.0.2',
                 'redis',
                 'Markdown==2.5.2',
                 'git+https://github.com/TintypeMolly/bleach@124-parse-email-fix',
                 'Pygments==2.0.2']

pip.main(['install'] + req_list)

이 방법의 단점은 pip --freeze를 그냥 못쓰는 것이지만...

TintypeMolly commented 9 years ago

pip freeze가 왜 안됨? 될 것 같은데. 음. 근데 이렇게 설치하는 사례를 내가 별로 못본 것 같음. 적절하게 다른사람들도 표준적으로 사용하는 절차가 있다면 이걸 도입해도 좋지만.

Perlmint commented 9 years ago

pip freeze를 못쓴다는 의미가 그냥 그 결과물을 그대로 저장하는 것이 아니라 그걸 기반으로 코드를 고쳐야 한다는 의미였음

이런 사례는 나도 못봤는데 그냥 제안으로 꺼내본 것이고 보통은 선택적(대체가 가능한) 의존성은 requirements.txt에 안넣는 방법을 선택하는 것 같음. 대신에 문서에 어떤 모듈을 사용하려면 뭘 설치하라는 식으로 적어두는 것 같은데.

angdev commented 9 years ago

이건 어떤가요? https://github.com/FeGs/Yuzuki/commit/0699d32dcf4c848551d5c3e5a2dcce84a9d2b247

reference: https://devcenter.heroku.com/articles/python-pip#cascading-requirements-files

TintypeMolly commented 9 years ago

음 난 이거 그냥 놔뒀으면 함. 윈도우 환경만을 위해 뭔가 더러운게 필요하다는게 좀 석연찮은데.

Perlmint commented 9 years ago

@TintypeMolly 그렇다면 그냥 MySQL-python이랑 redis는 readme에 남겨두고 requirements.txt에서는 삭제하는 것은 어떤가 저 둘은 주로 서비스 운영에서 필요한 추가 의존성이라고 여겨지는데

angdev commented 9 years ago

제 생각엔 메인 requirements.txt는 production이 맞는 것 같고 production, development 환경 분리는 되어야한다고 봅니다. 제가 언급한 방법과 스크립트 작성 이외에 딱히 방법은 없는 것 같은데 django/djangoproject.com 에서도 일단 그렇게 쓰고 있긴 하네요.

그리고 mysql이랑 윈도우랑은 무슨 관계인지 잘 모르겠는데 단순히 prerequisite 문제인 것 같고 이건 뭐 OS에 상관없이 깔아줘야겠죠. redis도 깔아줘야하는 것은 마찬가지이니 prerequisite를 문서에 쓰는게 맞는 것 같고 나머지는 pip install -r requirements/dev.txt 같은 걸로 할 수 있는게 낫지 않을까요?

Perlmint commented 9 years ago

음... 그냥 내가 감을 잘못 잡고 있었던 것 같은데 이 프로젝트가 홈페이지의 소스를 관리하는 것이라면 production에 mysql을 강제하고 있어도 상관 없어보임. 하지만 말 그대로 'production'환경에만 필요한 의존성이니 @FeGs가 예시로 든 djangoproject.com처럼 관리하는 것이 낫다고 생각함.

+스크립트를 생각한 이유는 처음 웹 개발 하는 사람들에게는 더 편하지 않을까? 라는 생각임

angdev commented 9 years ago

관계가 있는게 아니라 그 환경에 prerequisite가 안 갖춰진거죠. redis 없으면 맥이나 리눅스에서도 서버 안 뜨잖아요.

TintypeMolly commented 9 years ago

pip install -r requirements.txt 가 한방에 안 되고 에러가 나는건 윈도우 환경뿐임. 맥이나 리눅스라면 큰문제 없이 잘 돌아가. 그래서 윈도우랑 관계가 있다는거임. 그리고 윈도우도 존나 고생하면 pip install mysql-python 이 에러가 안나긴 해. 우분투에선 apt-get install libmysqlclient-dev (libmysqlclient18-dev 였던가?) 한번 해주면 한방에 해결되는 의존성이 윈도우에선 그렇게 안 될 뿐이지. 애초에 빌드가 "불가능" 하다면 mysql의 wheel 바이너리 판도 존재하지 않겠지. 근데 내가 직접 빌드해보려고 3시간 삽질해봤는데, 그냥 wheel 까는게 맞음.

TintypeMolly commented 9 years ago

관계 있는 거 맞음 -_-; 니가 빌드 직접 해보던가. mysql-python 윈도우 빌드는 좀 어렵네 수준이 아니라 (검열삭제) 윈도우 못해먹겠네가 맞다고.

TintypeMolly commented 9 years ago

그리고 사실 virualenv로 다시 자주 밀고 까는 것도 아니고, 개발환경이든 배포환경이든 설정할 때 한번만 까는 거라서 그냥 production에만 맞추고 싶고, 개발환경에선 그냥 mysql 자기가 알아서 주석처리 하던가 wheel 받아서 수동으로 깔던가 하는게 맞는 것 같은데. 난 requirements.txt는 좀 더 메타적인 의미에 집중하는게 맞다고 봄.

Perlmint commented 9 years ago

나는 mysql이 yuzuki를 실행하는데 있어서 '반드시 필요한' prerequisite인지가 결정하는데 있어서 중요한 요소라고 생각하는데 반드시 필요한 것은 아니라고 보고있고 이와 비슷한 경우를 다른 프로젝트들에서는 각 db backend별로 설정파일이나 prerequisite등을 각각 제공하는 방식으로 해결을 하고 있음. 그래서 필수가 아니라는 이유에서부터 빠졌으면 좋겠다가 내 의견을 정리한 것임

TintypeMolly commented 9 years ago

음 MySQL 자체가 Yuzuki의 prerequsite가 아니다? 그건 그렇긴 하네. 내가 일단 설계할때 항상 mysql을 염두하고잡고 있긴 한데, 사실 없다고 크게 문제될 기능은 안쓰고 있는 것 같기도 하고? 그렇게 말하면 또 맞는 것 같기도 하고. 후에 mysql-specific 기능을 쓰게 되면 그때라도 다시 추가해도 상관 없으려나

TintypeMolly commented 9 years ago

근데 redis나 mysql 이외의 db를 완벽하게 지원해서 굴러가게 할 로드맵은 없음. 내가 이걸 일반적인 CMS 프로젝트로 발전시킨다면 필요있을 일이긴 하지만, 난 앞으로도 모든 설계는 mysql, redis에 맞춰서 할거임. 사실 니들 말도 투명성으로 따지고 들자면 그럴듯 하긴 한데, 내가 앞으로 저 둘만을 염두에 둘거라서 빼기 거시기한 느낌을 갖는 것도 또한 사실이다.

TintypeMolly commented 9 years ago

야 니들 근데 실시간인데 걍 채팅방으로 가자

TintypeMolly commented 9 years ago

install.py 든 make든 설치/유지보수 스크립트를 만들 때까진 현황유지. 만든 다음엔 mysql-python은 requirements.txt에서 뗀다. 탕탕.