IDE같은 환경에서 코딩을 하면 코드 자동 정렬이 있지만 없는 경우도 있으며 이 때 사용 할 수 있는 python package module이 있다.


설치

  • python 패키지 모듈이기 때문에 pip를 통해서 설치가 가능하다
$ pip install autopep8


사용법

컨벤션에 맞는지 확인

  • 아주 간단하다. 다음 아래의 명령어를 쳐주면 된다.
$ autopep8 [filename.py]


다음과 같은 아주 간단한 코드가 있다고 했을 때 위의 명령어를 실행하면 사진처럼 나온다.

코드가 변화하는 과정을 보기 위해 일부러 엉망으로 작성하였다.

autopep_practice.py

def add(a,b):
    c =    b


    d =    a


    return(c + d)

위의 명령어를 실행하면 아래와 같이 수정해야하는 방향의 코드가 나옵니다.

Example


컨벤션에 맞게 수정

  • 여기서 더 나아가서 코드를 아예 컨벤션에 맞게 수정을 하고 싶다면 아래처럼 -i 옵션을 주면된다.
$ autopep8 -i [filename.py]
  • 예시

After

git을 사용 할 때 지금보다 더 아무것도 모를때는 .gitignore의 중요성도 모르고 막 커밋하고 그랬는데 IDE나 툴들을 이용하다 보면 큰 프로젝트들은 개인 환경에 따라서 설정 파일들이 바뀌기도하고 push하고 pull하는데 conflict가 나서 .gitignore을 수정했는데 계속 트래킹하는 파일이 존재해서 어떻게 하면 수정 할 수 있는지를 포스팅한다.


문제 상황

바로 이전 포스트에서도 포스팅을 하였지만 안드로이드로 프로젝트를 하나 진행하고 있었고 툴은 Android Studio를 통해서 개발을 하고 있었다. 커밋을하고 push를 할때마다 자꾸 로컬의 환경설정 파일들과 gradle 캐시 등등 여러 파일도 같이 push가 되어서 이제야 .gitignore에 파일을 추가했는데 여전히 트래킹 되는 파일이 존재해서 해결책이 있기에 포스팅을 해본다.

현재 내 로컬에서 문제는 해결된 상황이라서 스크린샷은 없고… 설명을 하자면 .gitignore에 .idea/가 추가되어 있는데도 계속 해서 .idea/workspace.xml과 같은 파일이 git에서 변화를 감지하고 commit 해야 할 목록에 추가를 한다….

이게 구글링을 해보니까 나중에 .gitignore에 추가를 해도 git이 이미 파일을 트래킹하고 있어서 이러한 트래킹 기록을 한번 싹 물갈이 해줘야한다고 한다. 더 자세히 들어가면 cach를 싹 밀어줘야 한다.

  • .gitignore에 파일이 추가 되었는데도 git이 계속 파일의 변화를 감지할 때


주의 할 점!

NOTE: 작업하던 내용들이 있으면 반드시 commit을 진행하고 아래 작업을 해야합니다!


문제 해결

  • 아래 명령어들을 shell에서 진행해주면 됩니다.
  • 캐시를 지우고 새로 add하는 과정으로 볼 수 있습니다.
...
git rm -r --cached .
git add .
git commit -m "Fix untracked files"
...


그래도 트래킹이 된다면…

  • 가끔 그래도 트래킹이 될 때가 있는데…(특정 브랜치에서 하고 다른곳으로 넘어가면 적용이 안될 때도 본거 같습니다.) .gitignore를 추가하고 다시 remote repository를 clone받으면 문제가 사라진다.


참고자료

이전부터 팀들과 함께 해서 하나 만들어오던 알람 안드로이드 프로젝트가 있어서 Circle CI 도 같이 공부할겸해서 빌드를 진행해 보았는데 gradle 관련해서 문제가 떠서 포스팅을 한다.


문제 상황

로컬에서 빌드가 잘 되던 프로젝트(안드로이드)를 Circle CI에 올렸더니 아래와 같은 문제가 발생하였다…

  • Exit code: 126
  • ./gradlew: Permission denied
  • Action failed: gradle dependencies

Error


문제 해결

  • Google에서 검색을 간단하게 해본 결과 아래처럼 설정을 해두면 된다고 한다.
  • chmod +x gradlew을 통해서 gradlew에 실행권한을 주면 된다.
...
dependencies:
    override:
        - chmod +x gradlew
...


참고자료

Circle CI에서 백그라운드 프로세스를 어떻게 진행해야 하는지에 대한 간단한 예제입니다.


환경

  • Circle CI
  • Background Task


문제 상황

Selenium을 한번 실습해보면서 서버를 띄워야하는데 서버 띄우는 부분을 클라이언트에서는 shell을 2개를 띄우고 실행하면 되지만 Circle CI에는 하나의 shell에서만 돌아가서 서버를 띄우는 상황이 생기게 되면 “백그라운드 프로세스로 돌리고” 나머지 과정을 진행해야 한다.

처음에는 간단하게 ‘&’를 뒤에 붙였지만… Circle CI에서는 오류가 발생하였다. 사실 처음에 위에 오류가 나는 문구조차 보지 못해서… 한참을 삽집을 했다. 여기서 교훈 = 뭐든지 자세하게 보고 자세히 읽자…


Error

문제가… 서버에 있다… 브라우저를 띄우지 못한다… 가상 모니터를 띄워야한다의 등등 이야기가 다 나왔고 시도를 해봤지만… 허허 등하불명이라 했던가 위에 문제를 찝어주었고 심지어 해결책까지 아래 처럼 나와있었다. (글을 자세하게 읽고 똑바로 읽도록 합시다 ㅠㅠ)


Recommendation


문제 해결

  • circle.yml 파일에 아래처럼 간단하게 코드를 수정해주면 가능하다.:)
  • background: true를 백그라운드로 돌리고 싶은 명령어에 추가로 옵션을 주면 된다.
...
pre:
    - pip install -r requirements.txt
post:
    - python -m http.server 8000:
        background: true
...

업데이트(2018.02.16): 이전 글에서는 3.6.0을 이용하는 방법이었는데 최신 python 버전이 나왔을 때 이를 사용하는 방법으로 내용을 변경하였다.

Circle CI에 python project를 올려서 테스트 및 빌드를 진행하였는데 python 3.6.0의 버전을 찾을 수 없다고 나와서 그걸 간단하게 해결한 내용을 포스팅에 옮기려 한다. 처음으로 코드를 올리는 글이 아닐까 싶다.


문제 상황

맥을 구매하고 파이썬 환경을 세팅하는 과정에서 홈페이지를 찾아보니 3.6.0이 있어서 가장 최신 버전으로 맞춰서 설치하였고 팀이 모임이 있어서 만났을 때 프로젝트 진행도 파이썬 3.6.0으로 진행을 하자고 결정하였다.

회의가 있어서 팀이 모이고 로컬에서 한번 테스트를 한 후에 Circle CI에 올리는 과정에 있어서 다음과 같이 빌드 오류가 나왔는데… “파이썬 3.6.0의 버전을 찾지 못하겠다”고 나왔다.

Problem

글을 읽어보면 3.6.0b1은 된다고 하기도 하고 리스트를 출력해서 직접 보고 설치를 부탁한다 등등 글이 나와있다. 하지만 이런 경우를 다른 사람들도 접했을 수도 있을까 해서 StackOverflow를 들어갔다.

역시나 아니나 다를까 같은 문제에 직면한 사람이 있었다.


StackOverflow Answer

문제 해결

  • machine에 있는 pre에 다음과 같은 명령어를 주면 된다고 한다.
  • cd /opt/circleci/.pyenv; git pull
...
machine:
    pre:
        # pull latest python versions from "circleci/.pyenv"
        - cd /opt/circleci/.pyenv; git pull
    python:
        version: [python version that you want]
...
  • 아무래도 아직까지 파이썬 3.6.0이 최신이라서 현재 Circle CI가 돌아가게 되는 원격 컴퓨터 혹은 컨테이너에서는 지원을 하지 않아서 machine에 설정을 해줄 때 .pyenv 폴더로 가서 최신 코드를 pull받고 진행을 하는것 같다.

참고자료