【问题标题】:Get the `m` and others of `pythonX.Ym`获取 `pythonX.Ym` 的 `m` 和其他
【发布时间】:2017-01-27 08:40:02
【问题描述】:

(请参阅this question 了解m 的含义)

我需要构造.virtualenvs/foo/include/pythonX.Ym 的包含路径来针对virtualenv 编译一些东西(即-I...)。我can get X.Y 使用sys.versionsys.final_version

如何获取m 来构造包含路径?

编辑:我试过sys.executable,但它指向.../foo/bin/python,这对此没有帮助。

【问题讨论】:

    标签: python


    【解决方案1】:

    获取包含路径的最简单方法是使用sysconfig.get_path() function

    import sysconfig
    
    include_path = sysconfig.get_path('include')
    

    此路径已针对 virtualenvs 进行了调整。对于 Python 之外的脚本目的,您可以直接打印路径:

    $ python -c 'import sysconfig; print(sysconfig.get_path("include"))'
    

    或通过将模块作为脚本运行来获取 all sysconfig 数据:

    $ python -m sysconfig
    

    然后解析转储到标准输出的输出。

    除此之外,如果您只想要可执行文件名(包括m),您可以从sys.executable variable 获得;这包括m 后缀:

    >>> import sys
    >>> sys.executable
    '/usr/bin/python3.5m'
    

    从 Python 3.2 开始,您还可以使用 sys.abiflags variable;在这种情况下,它设置为m

    >>> sys.abiflags
    'm'
    

    另见PEP 3149

    对于早期的 Python 版本,影响后缀的各种标志仍然可以通过上述sysconfig 模块作为配置变量使用:

    pymalloc = bool(sysconfig.get_config_var('WITH_PYMALLOC'))
    pydebug = bool(sysconfig.get_config_var('WITH_PYDEBUG'))
    wideunicode = bool(sysconfig.get_config_var('WITH_WIDE_UNICODE'))
    

    请注意,ubuntu 只是编译多个二进制文件并调整可执行文件名称以反映所选择的配置选项;在其他系统上,ABI 标志不一定反映在可执行文件名称中。

    【讨论】:

    • 有趣。使用 virtualenv(更新问题)时,我的情况与您不同
    • @J.C.Leitão:我到办公室时会启动虚拟机。
    • sysconfig.get_path('include') 绝对是问题的答案。 :)
    • 不应该是sysconfig.get_config_var而不是sysconfig.get_config吗?
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多