标签: distutils

如何在Sublime Text 2插件中包含第三方Python包

我正在编写一个使用模块SEAPI.py的sublime text 2插件,该模块本身导入了请求模块.

由于sublime text 2使用它自己的嵌入式python解释器,它没有看到我的ubuntu机器中安装的请求模块(我收到以下错误:ImportError:没有名为requests的模块).

到目前为止我能找到的最佳解决方案是将"请求"模块(文件的整个目录)从/usr/lib/python2.7/dist-packages/requests复制到我的插件目录中的sublime文本包目录中.但在那之后,它说它找不到'urllib3'模块.

有没有更好的方法导入请求模块,以便我不必将所有文件复制到我的插件目录?

我正在使用的当前代码如下:

MyPlugin.py

import sublime
import sublime_plugin
import SEAPI
...
Run Code Online (Sandbox Code Playgroud)

SEAPI.py

import requests
try:
    import simplejson as json
except:
    import json
from time import time, sleep
...
Run Code Online (Sandbox Code Playgroud)

编辑: 所选答案是正确的并修复了我的主要问题,但使用当前版本的"请求"与嵌入式sublime text 2解释器存在不同的问题.ST2的python缺少常规2.7 python中存在的各种模块(例如'fileio').

我已经使用"请求"模块解决了这个问题:https: //github.com/bgreenlee/sublime-github

我必须编辑'urllib3/response.py'文件到这个:

try:
    from cStringIO import StringIO as BytesIO
except ImportError:
    pass  # _fileio doesn't seem to exist in ST's python in Linux, but we don't need it
Run Code Online (Sandbox Code Playgroud)

python plugins distutils python-requests sublimetext2

29
推荐指数
2
解决办法
2万
查看次数

使用distutils/setuptools在安装后执行Python脚本

我正在尝试向Python distutils添加安装后任务,如如何使用简单的安装后脚本扩展distutils中所述?.该任务应该在已安装的lib目录中执行Python脚本.此脚本生成安装包所需的其他Python模块.

我的第一次尝试如下:

from distutils.core import setup
from distutils.command.install import install

class post_install(install):
    def run(self):
        install.run(self)
        from subprocess import call
        call(['python', 'scriptname.py'],
             cwd=self.install_lib + 'packagename')

setup(
 ...
 cmdclass={'install': post_install},
)
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但据我所知,有两个不足之处:

  1. 如果用户使用的Python解释器不是拾取者PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.
  2. 它对于干运行等是不安全的,我可以通过将其包装在一个函数中并使用它来解决它distutils.cmd.Command.execute.

我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.

python install distutils setuptools post-install

29
推荐指数
1
解决办法
1万
查看次数

在Python模块分发中查找文件

我编写了一个Python包,其中包含一个bsddb数据库,其中包含一个更耗时的计算的预计算值.为简单起见,我的安装脚本将数据库文件安装在与访问数据库的代码相同的目录中(在Unix上,类似于/usr/lib/python2.5/site-packages/mypackage/).

如何存储数据库文件的最终位置,以便我的代码可以访问它?现在,我正在使用基于__file__访问数据库的模块中的变量的hack :

dbname = os.path.join(os.path.dirname(__file__), "database.dat")

它有效,但看起来......是hackish.有一个更好的方法吗?我想让安装脚本从distutils模块中获取最终安装位置,并将其填入"dbconfig.py"文件,该文件与访问数据库的代码一起安装.

python distutils

28
推荐指数
3
解决办法
2万
查看次数

是否可以使用dist utils(setup.py)作为包数据的一部分来包含子目录?

基本上我的python包设置如下:

module
\_examples
  \_folder1
     \_file1.py
     \_file2.py
  \_folder2
    \_file1.py
    \_file2.py
Run Code Online (Sandbox Code Playgroud)

基本上我只想使用:

package_data  = { 
            'module': ['examples/*'],
  },
Run Code Online (Sandbox Code Playgroud)

因为我的项目总是让人们添加示例,我希望从我的应用程序中轻松列出它们.我可以在示例中为任何FILE工作,但不能通过子目录重新编译.这可能吗?

python install distutils setup.py

28
推荐指数
3
解决办法
2万
查看次数

Python distutils,如何获得将要使用的编译器?

例如,我可以使用python setup.py build --compiler=msvc或者python setup.py build --compiler=mingw32仅使用python setup.py build,在这种情况下将使用默认编译器(例如bcpp).如何在setup.py中获取编译器名称(例如msvc,mingw32bcpp,分别)?

UPD.:我不需要默认的编译器,我需要实际使用的那个,这不一定是默认的.到目前为止,我还没有找到比解析更好的方法sys.argv来查看那里是否有--compiler...字符串.

python compiler-construction installation distutils

27
推荐指数
3
解决办法
1万
查看次数

distutils/pip中的可选依赖项

在安装我的python包时,我希望能够告诉用户各种可选的依赖项.理想情况下,我还想打印一条关于这些可选要求的信息以及它们各自的要求.

在pip或docutils的文档中我还没有看到任何东西.这些工具是否支持可选的依赖项?

python distutils pip

27
推荐指数
3
解决办法
8396
查看次数

用distutils加速构建过程

我正在为Python编写C++扩展,我正在使用distutils来编译项目.随着项目的发展,重建它需要更长时间.有没有办法加快构建过程?

我读到make -j了distutils无法实现并行构建(如同).对于可能更快的distutils有什么好的替代方案吗?

我还注意到,每次调用python setup.py build时它都会重新编译所有目标文件,即使我只更改了一个源文件.应该是这种情况还是我可能在这里做错了什么?

如果它有帮助,这里有一些我尝试编译的文件:https://gist.github.com/2923577

谢谢!

c++ python distutils

27
推荐指数
3
解决办法
5610
查看次数

Python distutils错误:"[目录] ...不存在或不是常规文件"

我们采取以下项目布局:

$ ls -R .
.:
package  setup.py

./package:
__init__.py  dir  file.dat  module.py

./package/dir:
tool1.dat  tool2.dat
Run Code Online (Sandbox Code Playgroud)

以下内容为setup.py:

$ cat setup.py 
from distutils.core import setup


setup(name='pyproj',
      version='0.1',

      packages=[
          'package',
      ],
      package_data={
          'package': [
              '*',
              'dir/*',
          ],
      },
     )
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我想在所有非Python文件package/package/dir/目录.但是,运行setup.py install会引发以下错误:

$ python setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/package
copying package/module.py -> build/lib/package
copying package/__init__.py -> build/lib/package
error: can't copy 'package/dir': doesn't exist or not a …
Run Code Online (Sandbox Code Playgroud)

python distutils

26
推荐指数
1
解决办法
2万
查看次数

如何编写一个setup.py用于与setuptools,分发等一起使用的扭曲/扭曲插件?

所述扭曲扩展系统 是写扩展的扭曲应用的首选方式.

但是,由于插件系统的结构方式(插件进入一个应该是Python包的twisted/plugins目录),编写适当的setup.py来安装这些插件似乎并非易事.

我已经看到一些尝试将'twisted.plugins'添加到distutils setup命令的'packages'键,但由于它不是真正的包,所以会发生不好的事情(例如,__init__.py某些工具有助于添加).

其他尝试似乎使用'package_data'(例如,http://bazaar.launchpad.net/~glyph/divmod.org/trunk/view/head: /Epsilon/epsilon/setuphelper.py),但这也可能失败以奇怪的方式.

问题是:有没有人成功编写过setup.py来安装扭曲的插件,它适用于所有情况?

python distutils twisted setuptools distribute

26
推荐指数
2
解决办法
5118
查看次数

别碰我的shebang

我讨厌distutils的一件事(我猜他是这样做的邪恶者)是它改变了shebang线.换句话说,更合理的环境变量决定了经文

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

神奇地转换成了

#!/whatever/absolute/path/is/my/python
Run Code Online (Sandbox Code Playgroud)

这也可以用grok看到:我在virtualenv中使用了grokproject来启动我的项目,但是现在我不能再将开发目录移动了,因为它在shebang指令中放置了绝对路径.

我之所以这样问是双重的

  • 我想移动它,因为我开始在一个目录(实验)开发,现在我想把它移动到一个正确的路径,但我不能这样做.所以我创建了一个新的virtualenv和grokproject并复制了我的文件.这解决了这个问题,但让我对一个更加理性的解决方案的好奇心不满意.特别是,如果对virtualenv python解释器的引用是相对的,那么问题就不会出现在第一位.你知道virtualenv的布局,你可以轻松地参考virtualenv python.
  • 第二个原因是我希望能够将virtualenv scp到另一台计算机并在那里运行它没有问题.如果您有硬编码路径,则无法进行此操作.

python distutils virtualenv

25
推荐指数
2
解决办法
1万
查看次数