我正在编写一个使用模块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 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)
这种方法有效,但据我所知,有两个不足之处:
PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.distutils.cmd.Command.execute.我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.
我编写了一个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包设置如下:
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 setup.py build --compiler=msvc或者python setup.py build --compiler=mingw32仅使用python setup.py build,在这种情况下将使用默认编译器(例如bcpp).如何在setup.py中获取编译器名称(例如msvc,mingw32和bcpp,分别)?
UPD.:我不需要默认的编译器,我需要实际使用的那个,这不一定是默认的.到目前为止,我还没有找到比解析更好的方法sys.argv来查看那里是否有--compiler...字符串.
在安装我的python包时,我希望能够告诉用户各种可选的依赖项.理想情况下,我还想打印一条关于这些可选要求的信息以及它们各自的要求.
在pip或docutils的文档中我还没有看到任何东西.这些工具是否支持可选的依赖项?
我正在为Python编写C++扩展,我正在使用distutils来编译项目.随着项目的发展,重建它需要更长时间.有没有办法加快构建过程?
我读到make -j了distutils无法实现并行构建(如同).对于可能更快的distutils有什么好的替代方案吗?
我还注意到,每次调用python setup.py build时它都会重新编译所有目标文件,即使我只更改了一个源文件.应该是这种情况还是我可能在这里做错了什么?
如果它有帮助,这里有一些我尝试编译的文件:https://gist.github.com/2923577
谢谢!
我们采取以下项目布局:
$ 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包的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来安装扭曲的插件,它适用于所有情况?
我讨厌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指令中放置了绝对路径.
我之所以这样问是双重的
distutils ×10
python ×10
install ×2
setuptools ×2
c++ ×1
distribute ×1
installation ×1
pip ×1
plugins ×1
post-install ×1
setup.py ×1
sublimetext2 ×1
twisted ×1
virtualenv ×1