覆盖setup.cfg选项以实现默认行为

时间:2012-12-10 21:15:22

标签: python py2exe distutils setup.py

我有一个包含Linux安装选项的setup.cfg,

[install]
prefix=/opt/foo
install-lib=/opt/foo

,对应于此项目在Linux下的默认目录布局。

现在,同一个项目使用py2exe进行Windows安装。目前,我正在使用.bat文件在运行python setup.py py2exe时将此setup.cfg移开,以免将py2exe与这些设置混淆,我认为使用默认参数将其设置为distutils / py2exe。 / p>

我宁愿调用python setup.py py2exe一些额外的参数来覆盖setup.cfg中指定的参数,但是使用--prefix= --install-lib=给了我

[...]
*** 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

这与不尝试覆盖setup.cfg参数时的行为相同,因此似乎出现了问题。

我还愿意在setup.py中设置distutils.core.setup()的{​​{1}}参数,如果有必要,但主要问题似乎是:为什么值,为了实现默认的py2exe行为?

BTW,代码位于https://github.com/oskusalerma/trelby

1 个答案:

答案 0 :(得分:2)

我试图复制你的错误,虽然没有访问win *,可能还有更新的distutils。

ValueError: path '/opt/trelby' cannot be absolute这很重要,如果您因任何原因必须使用相对路径,请确保使用相对路径。

我没有使用普通的distutils来解决这个错误。

如果在config.cfg中指定了install-lib,

python setup.py install --prefix /some/other对我没有任何作用

python setup.py install --install-lib /some/other确实会更改安装路径。

换句话说,我的设置中的优先级是:

  • install-lib cmd line arg
  • install-lib in setup.fg
  • 前缀cmd line arg
  • setup.cfg中的
  • 前缀

请在没有py2exe的情况下进行测试。如果你的问题源于distutils,也许你可以升级它们。或者它可能是吞并命令行参数的py2exe,并且不会将它们传递给distutils,也许你可以追踪它并提交补丁。