2014-07-17 4 views
2

나는 setuptools에서 배포 한 python 스크립트를 작성했습니다. 나는이 스크립트 내부 multiprocess.Process를 사용하지만, 내가 배치 스크립트를 시작하는 경우이 오류 메시지와 함께 실패합니다 다중 처리 사용. setuptools가 설치 한 스크립트 내에서 처리

Traceback (most recent call last): 
    File "C:\Python34\Scripts\process_demo.py", line 4, in <module> 
    __import__('pkg_resources').run_script('procdemo==1.0', 'process_demo.py') 
    File "C:\Python34\lib\site-packages\setuptools-5.4.1-py3.4.egg\pkg_resources.py", line 534, in run_script 
    self.require(requires)[0].run_script(script_name, ns) 
    File "C:\Python34\lib\site-packages\setuptools-5.4.1-py3.4.egg\pkg_resources.py", line 1445, in run_script 
    "Can't perform this operation for unregistered loader type" 
    File "C:\Python34\lib\site-packages\procdemo-1.0-py3.4.egg\EGG-INFO\scripts\process_demo.py", line 19, in <module> 
    File "C:\Python34\lib\site-packages\procdemo-1.0-py3.4.egg\EGG-INFO\scripts\process_demo.py", line 14, in main 
    File "C:\Python34\lib\multiprocessing\process.py", line 105, in start 
    self._popen = self._Popen(self) 
    File "C:\Python34\lib\multiprocessing\context.py", line 212, in _Popen 
    return _default_context.get_context().Process._Popen(process_obj) 
    File "C:\Python34\lib\multiprocessing\context.py", line 313, in _Popen 
    return Popen(process_obj) 
    File "C:\Python34\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__ 
    prep_data = spawn.get_preparation_data(process_obj._name) 
    File "C:\Python34\lib\multiprocessing\spawn.py", line 173, in get_preparation_data 
    main_mod_name = getattr(main_module.__spec__, "name", None) 
AttributeError: 'module' object has no attribute '__spec__' 

내가 더 multiprocessing.Process의 전화보다 아무것도 짧은 테스트 파일을 생성하고, 문제는 분명히 거기에.

process_demo.py

import multiprocessing 

def worker(): 
    print("foooo") 

def main(threads=4): 
    procs = [] 

    for i in range(threads): 
     p = multiprocessing.Process(target=worker) 
     procs.append(p) 
     p.start() 

if __name__ == "__main__": 
    multiprocessing.freeze_support() 
    main() 

설치 파일 :

from ez_setup import use_setuptools 
use_setuptools() 

from setuptools import setup 

setup(name='procdemo', 
     version='1.0', 
     description='Some Demo', 
     scripts=['bin/process_demo.py'], 
    ) 

어떻게 안전하게 setuptools에를 파괴하지 않고 스크립트 내부 프로세스를 시작할 수 있습니까?

답변

1

나는 다른 방법이 있는지 모르겠어요하지만 당신은 파이썬 스크립트에서 콘솔 응용 프로그램을 구축 할 경우 아무 문제없이 작동합니다

from ez_setup import use_setuptools 
use_setuptools() 

from setuptools import setup 

setup(name='procdemo', 
     version='1.0', 
     description='Some Demo', 
     scripts=['bin/process_demo.py'], 
     entry_points = {'console_scripts': ['foobarfoo = process_demo:main']}, 
    )