Python 获取安装为';入境点';分发

Python 获取安装为';入境点';分发,python,virtualenv,distribute,entry-point,Python,Virtualenv,Distribute,Entry Point,我正在使用setup.py中的安装控制台命令。这将在系统中的某个路径中创建一个python文件(例如,debian中的root是/usr/local/bin),该文件可以根据系统或使用virtualenvs进行更改 我需要安装为setup.py的入口点的脚本的默认路径。根据setup.py的不同参数,位置可能会有所不同,包括--home,--user,--prefix,--install scripts等等 如果脚本已经存在,最好的方法是扫描$PATH中的内容,查找可执行文件(如which命令)

我正在使用setup.py中的安装控制台命令。这将在系统中的某个路径中创建一个python文件(例如,debian中的root是
/usr/local/bin
),该文件可以根据系统或使用virtualenvs进行更改


我需要安装为setup.py的入口点的脚本的默认路径。根据
setup.py
的不同参数,位置可能会有所不同,包括
--home
--user
--prefix
--install scripts
等等

如果脚本已经存在,最好的方法是扫描
$PATH
中的内容,查找可执行文件(如
which
命令),但这可能不是您想要的

该模块可能更有用

$ export WORKON_HOME='/tmp/so'
$ mkvirtualenv blah
$ python
Python 2.7.2
>>> import os
>>> import distutils.sysconfig
>>> pre = distutils.sysconfig.get_config_var("prefix")
>>> bindir = os.path.join(pre, "bin")
>>> print bindir
/tmp/so/blah/bin
…如果我运行
pip install pyflakes

如果您需要找到更具体的位置,那么
get\u config\u vars
dict可能很有用:

>>> [(k, v) for (k, v) in distutils.sysconfig.get_config_vars().items() if "/tmp/so" in str(v)]
[('prefix', '/private/tmp/so/blah'), ('exec_prefix', '/private/tmp/so/blah')]

您可以通过
sys
模块更方便地访问其中一些变量,包括
sys.prefix
sys.execprefix
根据
setup.py
的各种参数,位置可能会有所不同,包括
--home
--user
--prefix
——安装脚本
等等

如果脚本已经存在,最好的方法是扫描
$PATH
中的内容,查找可执行文件(如
which
命令),但这可能不是您想要的

该模块可能更有用

$ export WORKON_HOME='/tmp/so'
$ mkvirtualenv blah
$ python
Python 2.7.2
>>> import os
>>> import distutils.sysconfig
>>> pre = distutils.sysconfig.get_config_var("prefix")
>>> bindir = os.path.join(pre, "bin")
>>> print bindir
/tmp/so/blah/bin
…如果我运行
pip install pyflakes

如果您需要找到更具体的位置,那么
get\u config\u vars
dict可能很有用:

>>> [(k, v) for (k, v) in distutils.sysconfig.get_config_vars().items() if "/tmp/so" in str(v)]
[('prefix', '/private/tmp/so/blah'), ('exec_prefix', '/private/tmp/so/blah')]

您可以通过
sys
模块更方便地访问其中一些变量,包括
sys.prefix
sys.execprefix

您能更清楚地了解您的要求吗?我看不出一个结构合理的问题。你能接受你的其他一些答案吗?ByeIn setup.py您可以将控制台命令描述为入口点()此命令是在系统中的某个路径中创建的,我想知道是否有一种方法可以检查该路径而不假设它是
/usr/local/bin/
,因为如果您在virtualenv中安装包,它将位于另一个路径中。您想如何使用它?例如,在
setuptools.command.install\u scripts
类中有
install\u dir
属性(如果您将其子类化,则可以在setup.py中获得该属性),您可以更清楚地了解您的要求吗?我看不出一个结构合理的问题。你能接受你的其他一些答案吗?ByeIn setup.py您可以将控制台命令描述为入口点()此命令是在系统中的某个路径中创建的,我想知道是否有一种方法可以检查该路径而不假设它是
/usr/local/bin/
,因为如果您在virtualenv中安装包,它将位于另一个路径中。您想如何使用它?例如,在
setuptools.command.install\u scripts
类中有
install\u dir
属性(如果您将其子类化,可以在setup.py中获得它)谢谢,这解决了我的问题,感谢您在问题中的编辑:DI刚刚在文档中指出,
sys.prefix
将有助于不使用
distutils.sysconfig.get\u config\u var(“prefix”)
@jorgeduardocardona没问题!我已经编辑了答案,提到了
sys.prefix
等,很好,但windows呢?有什么跨平台的方法吗?谢谢你,这解决了我的问题,也谢谢你在问题中的编辑:DI刚刚在文档中指出,
sys.prefix
将有助于不使用
distutils.sysconfig.get\u config\u var(“prefix”)
@jorgeduardocardona没问题!我已经编辑了答案,提到了
sys.prefix
等,很好,但windows呢?有没有跨平台的方法?