2017-12-03 16 views
0

setuptools.Command를 서브 클래스 화하여 setup.py에서 사용자 정의 설치 옵션을 사용하고 있지만 부모 실행 기능이 호출 될 때 예외가 발생합니다. RuntimeError: abstract method -- subclass <class '__main__.vboxcustom'> must override 다음은 setup.py 코드사용자 정의 옵션을 사용하여 setuptools install 명령을 실행할 때 RuntimeError

from setuptools import setup 
from setuptools import Command 
import os, json, sys 

class vboxcustom(Command): 
    user_options = [ 
      ("disk-path=", "d", "Location where vbox disk files will be stored."), 
      ] 

    def initialize_options(self): 
     self.disk_path = None 

    def finalize_options(self): 
     if self.disk_path is None: 
      self.disk_path = os.path.expanduser("~/vbox") 

    def run(self): 
     settings_file = os.path.expanduser("~/.vbox") 

     settings = {"disk_path": self.disk_path} 

     f = open(settings_file, 'w') 
     f.write(json.dumps(settings)) 

     super(vboxcustom, self).run() 

setup(
     name="vbox", 
     version="1.0", 
     author="Ravi", 
     author_email="[email protected]", 
     python_requires=">=3", 
     install_requires=["dnspython"], 
     packages=["vboxhelper"], 
     scripts=["scripts/vbox"], 
     cmdclass={ 
      "install": vboxcustom, 
      } 
     ) 

던져 예외 것은 이것이다.

Traceback (most recent call last): 
    File "setup.py", line 37, in <module> 
    "install": vboxcustom, 
    File "/home/ravi/work/virenvs/testvbox/lib/python3.6/site-packages/setuptools/__init__.py", line 129, in setup 
    return distutils.core.setup(**attrs) 
    File "/usr/lib/python3.6/distutils/core.py", line 148, in setup 
    dist.run_commands() 
    File "/usr/lib/python3.6/distutils/dist.py", line 955, in run_commands 
    self.run_command(cmd) 
    File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command 
    cmd_obj.run() 
    File "setup.py", line 25, in run 
    super(vboxcustom, self).run() 
    File "/usr/lib/python3.6/distutils/cmd.py", line 176, in run 
    % self.__class__) 
RuntimeError: abstract method -- subclass <class '__main__.vboxcustom'> must override 

내가이 setuptools에에서 서브 클래스로되어 있지 않다 생각 :

스택 추적은 (오류가 꽤 비 특정 임 그냥 추측) 나는 어떤 방법 방법하지만를 오버라이드 (override) 할 것 같다. 설치 명령을 무시하는 명령으로 setuptools.command.install.install에서 서브 클래 싱을했는데 이제는 다른 오류가 발생합니다. 던져 새로운 예외는 이것이다 :

당신은 클래스 install에서 user_options을 보존 할 필요가
distutils.errors.DistutilsGetoptError: invalid negative alias 'no-compile': option 'no-compile' not defined 

답변

1

:

class vboxcustom(install): 
    user_options = install.user_options + [ 
     ("disk-path=", "d", "Location where vbox disk files will be stored."), 
    ] 
+0

@Ravi가 도움이됩니까? – phd

+0

예, 오류의 원인이되었습니다. 나는 지금 완전히 다른 오류에 갇혀있다. – Ravi

+1

고정! 또한 부모 initialize_options 및 finalize_options를 호출해야했습니다. – Ravi