2009-12-18 5 views
1

PHP 또는 시스템을 통해 PHP에서 스크립트를 호출 할 때만 파이썬에서 모듈을 가져 오려고 할 때 문제가 있습니다. 이전 라인이 파일에 있다면PHP에서 호출 할 때 파이썬 가져 오기가 실패합니다

import igraph #This works. 

, 말, test_module.py 후 : 파이썬 쉘에서

배쉬에서
파이썬 test_module.py 작동합니다. PHP 내에서

:
간부 ("파이썬 test_module.py", $ 출력, $의 RETVAL가) -> 실패 : $의 RETVAL = 1

을하지만, 스크립트가 아닌 경우 : 다음이있다, import math 벌금.

아무도 비슷한 것을 다루는 사람이 있습니까?

+0

추가'import sys; print sys.path'를 스크립트에 추가하십시오. – jfs

+0

'import os, site; print os.environ.get ('PYTHONPATH'), site.USER_SITE; 도움 (사이트)'도 도움이 될 수 있습니다. – jfs

+0

쉘이나 PHP에서 호출 한 스크립트 내에서 sys.path에는 차이점이 없습니다. –

답변

0

igraph 모듈은 파이썬의 표준 모듈 경로에 있습니까? 아니면 개별 스크립트와 동일한 디렉토리에 있습니까? 그렇다면 PHP가 다른 작업 디렉토리로 파이썬 파일을 호출 할 가능성이 있으며 스크립트의 경로 대신 해당 경로를 기준으로 작업을 가져 오려고합니다. 확인

+0

파이썬 셸 내에서 : import igraph; igraph .__ file__은 /usr/lib/python2.4/site-packages/python_igraph-0.5.2-py2.4-linux-x86_64.egg/igraph/__init__.pyc를 반환합니다. 상위 디렉토리/usr/lib/python2 .4/site-packages /는 PHP 스크립트에서 호출 될 때 sys.path 내에 있습니다. python_igraph-0.5.2-py2.4-linux-x86_64.egg도 sys.path 내에 있습니다. –

+0

PHP에서 호출했을 때 파이썬이 무엇을 제공하고 있는지 정확히 알기 위해 (exec() 호출에 대해'output' 인자를 지정하거나 대신'passthru()'를 사용하여) 명령의 결과를 얻으려고 했습니까? ? – Amber

+0

나는이 일을 시도했다. 무슨 일이 일어나고 있는지 전혀 알지 못하기 때문에 파이썬 오류 메시지를 출력하지 않는 것 같습니다. 그러나 반환 값은 1입니다. –

1

한 가지 sys.path

각 방법

+1

위에서 언급 한대로. 나는 sys.path 사이에 차이점을 발견하지 못했다. –

0

다른 사용자로 패키지를 설치했기 때문에 이런 일이 다른, 어쩌면 루트, 또는 뭔가를 호출 할 때의 차이점이 무엇인지 볼 수 있습니다.

내가 어떻게 디버깅을했는지, 두 경우 모두 (shell과 php의 exec, 기본적으로 사용자 www-data가 있음), 그리고 둘을 비교 한 것보다 sys.path의 출력을 확인하고 있는지 확인합니다.

정확히 누락 된 패키지가 포함 된 PHP에서 실행했을 때 '/root/.local/lib/python2.7/site-packages' 경로가 누락 된 것으로 나타났습니다. 그래서이 폴더의 내용을 '/usr/lib/python2.7/dist-packages/'으로 복사 했으므로 문제가 해결되었습니다.

+0

python 패키지를 손으로 복사하는 것은 나쁜 생각입니다. 파이썬 패키지를'/ usr/lib/python2.7/dist-packages /'에 설치하려면'apt-get'을 사용해야합니다.그렇지 않으면'pip'를 사용하여 Python 패키지를 설치하십시오 (아마도'virtualenv'에). 'root' 사용자에서'pip'를 실행하지 않으려 고합니다. – jfs

관련 문제