본문 바로가기

Technical/Development

Linux OpenSUSE 13.* 에서 Pycharm 사용하기 : update-alternatives 활용


OpenSUSE 13.2 에서 python 개발환경을 구성할 경우에 거쳐가야 할 몇 가지 단계들이 있다. 아마도 대다수 OpenJDK를 채택한 Linux들에도 해당될 듯 한데, Pycharm이 Linux를 위한 구현을 java 로 하였기 때문에 발생하는 일종의 패키지 충돌 문제를 만나게 된다.


다시 말하면, Opensource 진영에서 채택한 OpenJDK는 OpenSUSE 뿐 아니라 Ubuntu 등 대다수 Open Linux 배포판들이 java 플랫폼을 위해 기본으로 포함하고 있다. 그러나 Linux용 Pycharm은 Oracle-Sun jdk/jre 기반으로 만들어져 있으며, 이 문제는 update-alternatives 라는 유틸리티로 극복할 수 있다. 이를 잘 활용하면, 서로 다른 버전의 gcc가 각각 특정 라이브러리에 국한되어 컴파일 되어야 하는 상황에 대한 훌륭한 솔루션이 되기도 한다.


본 포스팅에서 다루어 나가려 하는 단계는 간단히 다음과 같다. 아래에 다루는 내용은 OpenSUSE 뿐 아니라 대다수 linux 배포판에서 적용 가능하며, 마지막 부분의 pycharm 설치 과정은 pycharm 새버전을 설치 또는 업그레이드하는 과정으로 유용하게 참조될 수 있다(pycharm 5.0.1 에서도 적용 가능 확인. 2015/12/7).


* Oracle jdk 를 다운로드하고 설치

* update-alternatives 설정으로 문제 해결

* pycharm 설치


Oracle jdk 8을 다운로드하고 설치


* Oracle jdk 8(rpm) 를 다운로드 한다(☞가기)(참고로 Oracle은 JDK 7에 대해서는 더 이상 지원을 하지 않겠다고 밝힌 바 있다. 2015년 현재 다운로드가능한 버전은 8u45 이다).

* 주의: ubuntu 15.* 부터는 rpm 으로 설치가 되지 않으니 여기 를 참조하여 ppa repository 를 등록하여 설치하여야 한다

$ su -

# java -version -> 현재 설치 된 jdk가 Openjdk인지 확인

# rpm -i --nodeps jdk-8u45-linux-x64.rpm -> nodeps 옵션이 없으면 기존 OpenJDK 와의 의존성 문제로 설치가 실패됨에 유의

Unpacking JAR files...
    rt.jar...
    jsse.jar...
    charsets.jar...
    tools.jar...
    localedata.jar...
    jfxrt.jar...
    plugin.jar...
    javaws.jar...
    deploy.jar...



update-alternatives 설정으로 충돌 문제 해결


* JDK 패키지 내에 포함 된 실행파일 들(java, javadoc, jar, javap, javac, javaws, javah, jarsigner)에 대해 동일한 우선순위(1551) 를 지정하여 update-alternatives 를 수행한다.

# update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_45/bin/java 1551

# update-alternatives --install /usr/bin/javadoc javadoc /usr/java/jdk1.8.0_45/bin/javadoc 1551

# update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.8.0_45/bin/jar 1551

# update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.8.0_45/bin/javap 1551

# update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_45/bin/javac 1551

# update-alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.8.0_45/bin/javaws 1551

# update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.8.0_45/bin/javah 1551

# update-alternatives --install /usr/bin/jarsigner jarsigner /usr/java/jdk1.8.0_45/bin/jarsigner 1551


* display option으로 java 실행파일에 현재 설정된 alternatives 가 확인 가능하며, config option으로 디폴트 버전을 스위칭할 수도 있다.

# update-alternatives --display java

java - auto mode
  link currently points to /usr/java/jdk1.8.0_45/bin/java
/usr/java/jdk1.8.0_45/bin/java - priority 1551
/usr/lib64/jvm/jre-1.5.0-gcj/bin/java - priority 1500
  slave jre: /usr/lib64/jvm/jre-1.5.0-gcj
  slave jre_exports: /usr/lib64/jvm-exports/jre-1.5.0-gcj
  slave rmiregistry: /usr/lib64/jvm/jre-1.5.0-gcj/bin/rmiregistry
Current 'best' version is '/usr/java/jdk1.8.0_45/bin/java'.


# update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                   Priority   Status
------------------------------------------------------------
* 0            /usr/java/jdk1.8.0_45/bin/java          1551      auto mode
  1            /usr/java/jdk1.8.0_45/bin/java          1551      manual mode
  2            /usr/lib64/jvm/jre-1.5.0-gcj/bin/java   1500      manual mode


* root 아닌 일반 유저(python 개발 계정)으로 전환하여, java 환경 변수를 설정해 둔다

$ cd

$ vi .bashrc -> 아래 라인을 스크립트 상단에 추가

export JAVA_HOME=/usr/java/jdk1.8.0_45

$ source .bashrc

$ java -version

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)


Pycharm 4.5.1 community edition 설치 및 설정


* pycharm 4.5.1 패키지 파일을 다운로드(☞가기)하고 설치한다. 작업의 편의를 위해, 반드시 일반 유저(개발자 계정)으로 진행함에 유의하자.

$ tar xvzf pycharm-community-4.5.1.tar.gz -C /tmp/

$ sudo su -c "chown -R root:root /tmp/pycharm*"

sudo rm -rf /opt/pycharm-community/  ==> 업그레이드일 경우

$ sudo rm /usr/local/bin/pycharm /usr/local/bin/inspect ==> 업그레이드일 경우

$ sudo mv /tmp/pycharm-community* /opt/pycharm-community

$ sudo su -c "ln -s /opt/pycharm-community/bin/pycharm.sh /usr/local/bin/pycharm"

$ sudo su -c "ln -s /opt/pycharm-community/bin/inspect.sh /usr/local/bin/inspect"


$ pycharm &




- Barracuda -