파이썬 subprocess로 실행시. local 라이브러리만 불러와서 에러가 납니다.

조회수 1549회

제가 지금 아나콘다 python2.7 가상환경 만들어서 인터프리터 하고있는데요.

subprocess모듈 curl 프로세스 방법으로 a.py파일 실행시키면.. 아나콘다환경 라이브러리를 쓰는게 아니라 로컬 라이브러리로 연결해버려서 에러가 발생하더라고요.. 이상하게도 터미널에서 a.py파일경로로 실행시키면 터미널이 아나콘다 환경으로 설정되 있어서 a.py파일 실행 잘 되는데, subprocess가 local라이브러리로만 연결하네요.. 아나콘다 환경에서 계속 개발 하려하는데 해결책이 있을까요?

실행.py

import subprocess

try:
    output = subprocess.Popen('a.py파일경로', shell=True)

except subprocess.CalledProcessError as e:
    output = e.output

a.py

import 라이브러리1
import 라이브러리2
print('ㅎㅎ')

아나콘다 python2.7 가상환경의 site-packages에 라이브러리1, 라이브러리2 파일이 저장되어 있어요..

local환경 python2.7에는 라이브러리1, 라이브러리2 없고요, 아나콘다 환경에서 개발 하고자합니다.

대략 이런 에러 입니다.

Traceback (most recent call last):
  File "/home/uk/ProjectEn/backend_test/preprocess_MFCC.py", line 4, in <module>
    import librosa
  File "/usr/local/lib/python2.7/dist-packages/librosa/__init__.py", line 12, in <module>
    from . import core
  File "/usr/local/lib/python2.7/dist-packages/librosa/core/__init__.py", line 109, in <module>
    from .time_frequency import *  # pylint: disable=wildcard-import
  File "/usr/local/lib/python2.7/dist-packages/librosa/core/time_frequency.py", line 10, in <module>
    from ..util.exceptions import ParameterError
  File "/usr/local/lib/python2.7/dist-packages/librosa/util/__init__.py", line 67, in <module>
    from .utils import *  # pylint: disable=wildcard-import
  File "/usr/local/lib/python2.7/dist-packages/librosa/util/utils.py", line 111, in <module>
    def valid_audio(y, mono=True):
  File "/usr/local/lib/python2.7/dist-packages/librosa/cache.py", line 49, in wrapper
    if self.location is not None and self.level >= level:
AttributeError: 'CacheManager' object has no attribute 'location'

터미널 python은 Anaconda 입니다.

uk@uk-master:~$ python
Python 2.7.15 |Anaconda, Inc.| (default, Oct 23 2018, 18:31:10) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 당연히 shell 을 하나 더 실행하는 경우라 virtualenv 속성은 알 수가 없습니다.

    운영체제를 알 수 없어 구체적 답변은 어렵습니다만 unix/liunx 라면 아래와 같이 하면 됩니다. 윈도우도 마찬가지로 배치파일을 실행하고 수행하면 될거라 봅니다.

    output = subprocess.Popen('source activate; python a.py', shell=True)
    
    • 우분투 환경에서 사용하고 있는데, 여전히 local python 2.7을 부르네요 ㅠ 알 수 없는 사용자 2018.11.8 16:42
    • 제가 Flask, run.py 하나로 실행하는 구조라서 스레드 때문에 subprocess 사용하고 있는데, 다른 대안이 있을까요? 알 수 없는 사용자 2018.11.8 16:51
    • 다른 대안이라면 sh 파일(쉘스크립트파일)을 작성하시되 activate 환경 로드하고 py 파일 수행하도록 작성후 subprocess 에서 작성한 sh 파일을 실행하면 됩니다. 정영훈 2018.11.8 17:46
    • 조언 감사합니다! 알 수 없는 사용자 2018.11.9 10:00

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)