【问题标题】:Get the path of python console commands installed as 'entry_points' with distribute通过分发获取安装为“entry_points”的python控制台命令的路径
【发布时间】:2012-03-20 02:30:28
【问题描述】:

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

我需要使用 setup.py 作为 entry_points 安装的脚本的默认路径

【问题讨论】:

  • 你能更清楚你在问什么吗?我在这里没有看到一个格式正确的问题。
  • 您也可以接受您的其他一些答案吗?再见
  • 在 setup.py 中,您可以将 console_command 描述为 entry_point (packages.python.org/distribute/…) 此命令是在系统的某个路径中创建的,我想知道是否有办法检查该路径而无需假设是/usr/local/bin/,因为如果您将软件包安装在 virtualenv 中,它将位于另一个路径中。
  • 你喜欢如何使用它?比如setuptools.command.install_scripts类中有install_dir属性(子类化可以在setup.py中获取)

标签: python virtualenv distribute entry-point


【解决方案1】:

位置可能因setup.py 的各种参数而异,包括--home--user--prefix--install-scripts 等。

如果脚本已经存在,找到它的最佳方法是扫描$PATH 中的内容,寻找可执行文件(如which 命令),但这可能不是你想要的之后

distutils.sysconfig 模块可能更有帮助。

$ 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,例如pyflakes 结束的目录

如果您需要查找更具体的位置,get_config_vars 字典可能会很有用:

>>> [(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.prefixsys.execprefix

【讨论】:

  • 谢谢,这解决了我的问题,感谢您对问题的编辑:D
  • 我刚刚在文档中指出,sys.prefix 将在不使用 distutils.sysconfig.get_config_var("prefix") 时有所帮助
  • @JorgeEduardoCardona 没问题!我已经编辑了提到sys.prefix等的答案,好点
  • 但是windows呢?有没有跨平台的方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多