0

Windows では sys.prefix は python フォルダーですが、Linux では一般に /usr を指します。これは、別の方法がない限り、名前によるディレクトリ ハントが発生する必要があることを意味します。

ある?

フォルダ名を頼りにするのもカオスで、よくあるものを挙げると「Python27」「python2.7」。

このスクリプトはやり過ぎですか?私はこれを正しく行っていますか?

os.environ は、PYTHON_PATH がないか、実行中のものが一致しない可能性があるため、役に立ちません。

sys.executable は、Windows でしか機能しないため、役に立ちません。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# rev 0.0.0.1
import os, platform, sys
"""File: _python_pfn.py
Seems excessive...
3 imports, 3 functions, 30 lines just to 
determine current python installation parent path, python folder name, and full path
"""
def _python_parent():
    """assume linux, but if windows just return sys.prefix"""
    ret = os.path.join('{}'.format(sys.prefix), 'lib')
    if platform.uname()[0] == 'Windows':
        ret = '{}'.format(sys.prefix)
    return ret

def _python_name(path):#, major=None, minor=None
    """assume windows, but if not listdir and find"""
    ma, mi = (str(sys.version_info[0]), str(sys.version_info[1]))
    #if major is not None: ma = str(major)
    #if minor is not None: ma = str(minor)
    ret = os.path.split(path)[1]
    if platform.uname()[0] != 'Windows':
        ls = [k for k in os.listdir(path) if os.path.isdir(os.path.join(path, k)) ]
        for k in ls:
            if k.lower().find('python') != -1:
                if k.find(ma) != -1:
                    if k.find(mi) != -1:
                        ret = k
    return ret

def _python_path(path):
    """use as _python_path(_python_parent())"""
    return os.path.join(path, _python_name(path))
4

1 に答える 1

3

パスを取得するだけで十分ではありませんか

>>> import os
>>> os.path.dirname(os.__file__)
'/usr/lib/python2.7'
于 2012-10-29T18:52:25.233 に答える