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

제가 지금 아나콘다 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답변

  • 좋아요

    2

    싫어요
    채택취소하기

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

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

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.