tensorflow 를 설치하고 import tensorflow as tf 를 하면 

 

>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/__init__.py", line 59, in <module>
    from tensorflow.core.framework.graph_pb2 import *
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/core/framework/graph_pb2.py", line 15, in <module>
    from tensorflow.core.framework import node_def_pb2 as tensorflow_dot_core_dot_framework_dot_node__def__pb2
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/core/framework/node_def_pb2.py", line 15, in <module>
    from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/core/framework/attr_value_pb2.py", line 15, in <module>
    from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/core/framework/tensor_pb2.py", line 15, in <module>
    from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/core/framework/resource_handle_pb2.py", line 22, in <module>
    serialized_pb=_b('\n/tensorflow/core/framework/resource_handle.proto\x12\ntensorflow\"r\n\x13ResourceHandleProto\x12\x0e\n\x06\x64\x65vice\x18\x01 \x01(\t\x12\x11\n\tcontainer\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\thash_code\x18\x04 \x01(\x04\x12\x17\n\x0fmaybe_type_name\x18\x05 \x01(\tBn\n\x18org.tensorflow.frameworkB\x0eResourceHandleP\x01Z=github.com/tensorflow/tensorflow/tensorflow/go/core/framework\xf8\x01\x01\x62\x06proto3')
TypeError: __new__() got an unexpected keyword argument 'serialized_options'

 

이렇게 serialized_option 에러가 나는 경우가 있는데 이 경우 protobuf 버전이 맞는지 확인하고 맞는 버전을 설치해줘야 한다

 

tensorflow 1.12 버전 기준 protobuf 3.6.1 을 설치하면 된다

 

pip install protobuf==3.6.1

 

블로그 이미지

우송송

,

Tensorflow 레포지토리를 clone 받고 이것저것 설정 후 학습을 시작하기 위해 train.py 을 실행시켰을 때 내 경우 어떤 환경에서든 항상 'object_detection' 을 찾을 수 없다는 에러가 나왔다

 

train.py 를 실행하면 위 와 같이 'object detection' 모듈을 찾을 수 없다는 에러가 나온다

 

 

 

진짜로 저 모듈이 없는건가 싶어 tensorflow 폴더를 뒤져보면 버젓이 존재하는데 없다고 죽어버리니 당황스러웠다

 

처음엔 Pycharm 으로 실행 시키고 빨간 줄이 뜨는 곳 마다 찾아가서 object_detection 을 import 하는 곳에 모두 상위 디렉토리를 명시해 줬었다... 야근만 피할 수 있다면 노가다도 마다하지 않는다

 

하지만 환경을 세팅할 때 마다 매번 그럴 수도 없는 노릇이라 에러를 한번 검색해봤는데 다급할 땐 아무리 찾아도 나오지 않던 해결방법이 검색결과 맨 위에 나와있었다;;

 

 

방법은 간단하다

터미널 창을 열고 아래와 같이 환경변수 하나만 추가해주면 해결된다.

export PYTHONPATH=$PYTHONPATH:/home/user/tensorflow/models/research:/home/user/tensorflow/models/research/slim
블로그 이미지

우송송

,
$ mount -o remount,rw /
$ chmod 644 /usr/lib/sudo/sudoers.so
$ reboot​
$ sudo chmod 777 /

permission denied 문제를 해결하기 위해 chmod 명령어를 사용하다 실수로 위 와 같이 root directory 의 접근권한을 건드렸을 경우 sudo 가 안먹히며 아래의 에러를 토해 낼 것이다.

 

sudo: error in /etc/sudo.conf, line 0 while loading plugin 'sudoers_policy'

sudo: /usr/lib/sudo/sudoers.so must only be writable by owner

sudo: fatal error, unable to load plugins

 

만약 현재 상태에서 root 에 로그인이 가능하다면 

 

$ su root     # 암호를 입력해야 한다
$ chmod 644 /usr/lib/sudo/sudoers.so
$ chown -R root /usr/lib/sudo

명령어로 해결할 수 있지만 비밀번호 등 어떠한 이유로 불가능 하다면 아래의 방법으로 해결 가능하다

 

1. shift 키를 누른 상태로 ubuntu 를 재부팅시켜 GNU GRUB 메뉴로 진입한다.

(만약 ubuntu 로고가 보일 경우 타이밍을 놓친것이니 다시 shift 를 누른 채로 재부팅 한다.)

 

2. "Advanced options" 을 선택한다

 

3. "(recovery mode)" 로 끝나는 메뉴로 진입한다. (보통 위 에서 두 번째 메뉴)

예) Ubuntu GNU/Linux, with Linux 3.8.0-26-generic (recovery mode) 

 

4. "Drop to root shell prompt" 를 선택하여 root 권한 terminal 을 사용

 

5.

$ mount -o remount,rw /
$ chmod 644 /usr/lib/sudo/sudoers.so
$ reboot

재부팅 후 sudo 가 정상 작동하는지 확인

 

 

참조)

https://askubuntu.com/questions/637432/sudo-comes-up-with-an-error-cannot-run-anything-as-root

'OS > Ubuntu' 카테고리의 다른 글

[Ubuntu] SCP 명령어로 파일 또는 폴더 주고받기  (1) 2019.10.14
블로그 이미지

우송송

,

[파일 전송]

scp -P [상대 scp 포트번호]  [파일 경로] [상대계정이름]@[상대IP]:[상대컴퓨터 저장경로]

 

[폴더 전송]

scp -r -P [상대 scp 포트번호]  [폴더 경로] [상대계정이름]@[상대IP]:[상대컴퓨터 저장경로]

 

ex)

[파일 전송]
$ scp -P 60700 /home/ubuntu/Desktop/file.txt  user@192.168.64.105:/home/user/Desktop


[폴더 전송]
$ scp -r -P 60700 /home/ubuntu/folder  user@192.168.64.105:/home/user/Desktop/

 

[파일 받기]

 scp -P [상대 scp 포트번호] [상대계정이름]@[상대 IP]:[목적 파일 위치] [파일이 저장 될 경로] 

[폴더 받기]

scp -r -P [상대 scp 포트번호] [상대계정이름]@[상대 IP]:[목적 폴더 위치] [폴더가 저장 될 경로] 

 

ex)

[파일 받기]
$ scp -P 60700 user@192.168.64.105:/home/user/Desktop/file.txt /home/ubuntu/Desktop/


[폴더 받기]
$ scp -r -P 60700 user@192.168.64.105:/home/user/Desktop/folder /home/ubuntu/Desktop/
블로그 이미지

우송송

,
import pymysql.cursors

url = 'xxx.xxx.xxx.xxx'
conn = pymysql.connect(host=url, port=3306, user='root', password='1234', db='eximdb', charset='utf8')
curs = conn.cursor()

sql = 'show tables'
curs.execute(sql)

result = curs.fetchall()
print(result)
결과 : (('el_connect_inf',), ('qrtz_blob_triggers',))

 

 

결과를 Dictionary 형식으로 받고 싶으면 mysql.connect 의 파라미터에

 

cursorclass=pymysql.cursors.DictCursor

 

를 추가한다.

import pymysql.cursors

url = 'xxx.xxx.xxx.xxx'
conn = pymysql.connect(host=url, port=3306, user='root', password='1234', db='eximdb', charset='utf8', cursorclass=pymysql.cursors.DictCursor)
curs = conn.cursor()

sql = 'show tables'
curs.execute(sql)

result = curs.fetchall()
print(result)
결과 : [{'Tables_in_eximdb': 'el_connect_inf'}, {'Tables_in_eximdb': 'qrtz_blob_triggers'}]

 

연결방법은 내부, 외부 mysql 동일하다.

블로그 이미지

우송송

,