Twisted Documentation에 명시된 twisted 러너 용 플러그인으로 멋진 파이썬 Twisted 앱을 만들었습니다. http://twistedmatrix.com/documents/current/core/howto/tap.html. PyInstaller로이 패키지를 패키징하는 데 문제가 있습니다. 고정 된 애플리케이션을 실행하는 동안 twisted 플러그인을 찾을 수 없습니다.pyinstaller를 사용하여 twistd 플러그인 패키징
프로젝트를 보내려면 twistd 러너 모듈을 사용하여 내 최상위 시작 스크립트를 만들었습니다.
#!/usr/bin/env python
from twisted.scripts.twistd import run
from sys import argv
argv[1:] = [
'--pidfile', '/var/run/myapp.pid',
'--logfile', '/var/run/myapp.log',
'myapp_plugin'
]
run()
다음으로 PyInstaller를 사용하여 단일 디렉토리 배포로 고정합니다. 위의 냉동 스크립트를 실행하는이 (지면 관계 상 편집 됨)입니다 내 twistd 플러그인을 찾을 수 없기 때문에 실패
~/pyinstall/dist/bin/mystartup?16632/twisted/python/modules.py:758:
UserWarning: ~/pyinstall/dist/mystartup?16632 (for module twisted.plugins)
not in path importer cache (PEP 302 violation - check your local configuration).
~/pyinstall/dist/bin/mystartup: Unknown command: myapp_plugin
보통을, Twistd 트위스트/플러그인/myapp_plugin.py 내 플러그인을 발견하는 파이썬 시스템 경로를 검사합니다. 시작 스크립트에서 twistd 플러그인 목록을 인쇄하면 목록은 PyInstaller에서 생성 된 실행 파일에서 비어 있습니다 (예 :
from twisted.plugin import IPlugin, getPlugins
plugins = list(getPlugins(IPlugin))
print "Twistd plugins=%s" % plugins
다소 기본 PyInstaller 사양 파일을 사용하지만 숨겨진 가져 오기 또는 가져 오기 후크가 지정되지 않았습니다.
필자는 로깅, pid 파일 등과 같은 twistd 기능을 좋아하므로 플러그인 문제를 피하기 위해 트위스트 러너를 모두 포기하지 않아도되고 싶습니다. 고정 된 실행 파일에서 twistd 플러그인을 찾을 수있는 방법이 있습니까?
위대한 질문입니다. 물어 줘서 고마워. 패키징 Twisted plugins은 아픈 곳입니다. 패키징 도구는 종종 이것을 고려하지 않습니다. pyinstaller에 대해 더 많이 알고있는 사람으로부터 대답을 기다리고 있습니다. :). – Glyph
감사합니다. 그 동안 나는 twisted를 사용하지 않고 twisted reactor를 시작하는 트위스트 서버 파이썬 스크립트에서 PyInstaller를 성공적으로 돌릴 수 있었다. 'reactor.listenTCP (9999, site); reactor.run()'. 그래서 twisted plugin 시스템에서만 일반적으로 꼬인 패키지 문제가 없습니다. –
경고 경로'~/pyinstall/dist/mystartup? 16632'는 의심스러워 보입니다. pyinstaller가 생성하는 것으로 가정합니다. 따라서 pyinstaller는 Python import config (예를 들어,'sys.path'에 국한되지 않음)의 오른쪽 부분에 pyinstaller를 추가 할 책임이 있습니다. 제가 정말로 궁금해하는 것은 왜 경로에'~'이 있는지입니다. 아시다시피,'os.path.expanduser'를 사용하여 명시 적으로 해석하지 않는 한 그 문자는 특별한 의미가 없습니다. 'twisted.plugins'에 의해 수행 된 경로 연산은 모두 혼란 스러울 것입니다. 리터럴'~'로 그 경로가 어딘가의 import 설정에 나타 납니까? –