2012-12-10 2 views
2

을 달성했다.무시 setup.cfg 옵션, 나는 리눅스 설치 옵션이 포함 된 setup.cfg을 가지고이 프로젝트는 리눅스가 기본 디렉토리 레이아웃에 해당</p> <pre><code>[install] prefix=/opt/foo install-lib=/opt/foo </code></pre> <p>을 기본 동작

이제 동일한 프로젝트에서 Windows 설치를 위해 py2exe를 사용합니다. 현재, 나는이 setup.cfg 파일을 사용하여 python setup.py py2exe을 실행하는 동안 py2exe를 기본 매개 변수를 사용하는 distutils/py2exe에 해당하는 설정과 혼동하지 않도록합니다.

내가 차라리 사람들은 setup.cfg에 지정하지만, --prefix= --install-lib=를 사용하여 대체 할 몇 가지 추가 인수 python setup.py py2exe를 호출하는 것 나에게 setup.cfg을 무시하려고하지 않을 때와 같은 동작입니다

[...] 
*** copy data files *** 
Traceback (most recent call last): 
    File "setup.py", line 158, in <module> 
    **platformOptions) 
    File "C:\Python27\lib\distutils\core.py", line 152, in setup 
    dist.run_commands() 
    File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands 
    self.run_command(cmd) 
    File "C:\Python27\lib\distutils\dist.py", line 972, in run_command 
    cmd_obj.run() 
    File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 243, in run 
    self._run() 
    File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 312, in _run 
    self.create_binaries(py_files, extensions, dlls) 
    File "C:\Python27\lib\site-packages\py2exe\build_exe.py", line 560, in create_binaries 
    install_data.ensure_finalized() 
    File "C:\Python27\lib\distutils\cmd.py", line 109, in ensure_finalized 
    self.finalize_options() 
    File "C:\Python27\lib\distutils\command\install_data.py", line 41, in finalize_options 
    ('force', 'force'), 
    File "C:\Python27\lib\distutils\cmd.py", line 298, in set_undefined_options 
    src_cmd_obj.ensure_finalized() 
    File "C:\Python27\lib\distutils\cmd.py", line 109, in ensure_finalized 
    self.finalize_options() 
    File "C:\Python27\lib\distutils\command\install.py", line 353, in finalize_options 
    'userbase', 'usersite') 
    File "C:\Python27\lib\distutils\command\install.py", line 504, in convert_paths 
    setattr(self, attr, convert_path(getattr(self, attr))) 
    File "C:\Python27\lib\distutils\util.py", line 199, in convert_path 
    raise ValueError, "path '%s' cannot be absolute" % pathname 
ValueError: path '/opt/trelby' cannot be absolute 

을 제공합니다 매개 변수가 전혀 없으므로 문제가 발생합니다.

또한 필요에 따라 distutils.core.setup()options 매개 변수를 setup.py에 설정 하겠지만 기본 질문은 다음과 같을 것입니다. 기본 py2exe 동작을 달성하기 위해 어떤 값으로 설정 되었습니까?

BTW, 코드 내가 *이기는하지만 액세스하지 않고, 당신에게 오류를 복제하려고 가능성이 새의 distutils에 https://github.com/oskusalerma/trelby

+0

예를 들어 setup_win.py와 setup_lin.py가없는 이유는 무엇입니까? – Tuim

+0

대부분의 설정과 논리는 Linux 및 Windows 설치에서 동일하므로 별도의 setup _ *. py 파일이 필요하지 않습니다. –

답변

2

에서 발견된다.

ValueError: path '/opt/trelby' cannot be absolute 어떤 이유로 든 상대 경로를 사용해야하는 경우 상대 경로를 사용해야합니다.

일반 distutils에서는 오류가 발생하지 않습니다. 이 설치-lib가있는 경우

python setup.py install --prefix /some/other 나를 위해 아무것도하지 않는

python setup.py install --install-lib /some/other 설치 경로를 변경하지 config.cfg에 지정되어 있습니다. 즉

내 설정의 우선 순위는 다음과 같습니다 설정에서

  • 설치-lib에 cmd를 라인 인수
  • 설치-LIB setup.fg에서
  • 접두사 cmd를 줄 인자
  • 접두사 .cfg

py2exe없이 테스트하십시오. 문제가 distutils에서 비롯된 것이라면 아마도 업그레이드 할 수 있습니다. 또는 py2exe가 명령 줄 인수를 삼켜 버리고 distutils에 전달하지 않을 수도 있습니다. 아마도 추적하여 패치를 제출할 수 있습니다.

+0

도움이되지 않습니다. 죄송합니다. 전체 질문은 py2exe - setup.cfg와 명령 줄 인수 우선 순위를 사용하지 않는 것이 중요하다는 것입니다. 기본 Linux 설치 위치는'/ opt/trelby'로되어 있으므로 상대 경로로 만들 수는 없습니다. 나는 당신이 "평범한 setuptools로 그 실수를하지 말라"는 뜻을 모릅니다. setuptools는 실제로 이것을 입력하지 않거나 distutils를 의미합니까?또한, distutils 버전 및 업그레이드에 대한 모호한 가정은 사용하는 버전을 지정하지 않으면 도움이되지 않습니다 (Python 버전은 2.7.3, FWIW). –

+0

setuptools! = distutils. 예 : http://stackoverflow.com/a/6522905/1176543 –

+0

사실, 분명히 혼란스럽고 수정되었습니다. –