我正在尝试将一个开源库移植到Python 3.(SymPy,如果有人想知道的话.)
所以,我需要2to3在为Python 3构建时自动运行.为此,我需要使用distribute.因此,我需要移植当前系统(根据doctest)distutils.
不幸的是,我不知道什么是这些模块-之间的区别distutils,distribute,setuptools.文档是最好的粗略,因为它们似乎都是彼此的分支,旨在在大多数情况下兼容(但实际上,不是全部)......等等.
有人可以解释这些差异吗?我应该用什么?什么是最现代的解决方案?(Distribute顺便说一句,我也很欣赏一些关于移植的指南,但这有点超出了问题的范围......)
pip,virtualenv和distribute?在我对问题4314376的回答中,我建议使用,ez_setup以便您可以安装pip并virtualenv如下:
curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv
Run Code Online (Sandbox Code Playgroud)
我最初是从Jesse Noller的博客文章中提取这些说明的,所以你想在Mac上使用Python?.我喜欢保持一个干净的全局site-packages目录的想法,所以我安装的唯一其他软件包就是 virtualenvwrapper和distribute.(distribute由于这个Python公共服务公告,我最近添加到了我的工具箱.为了安装这两个软件包,我使用了:
sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
Run Code Online (Sandbox Code Playgroud)
要真正遵循Python公共服务公告,在全新的Python安装上,我会执行以下操作:
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)
在一个评论我的回答 …
使用setuptools/distribute时,我无法让安装程序提取任何package_data文件.我读过的所有内容都表明以下是正确的方法.有人可以建议吗?
setup(
name='myapp',
packages=find_packages(),
package_data={
'myapp': ['data/*.txt'],
},
include_package_data=True,
zip_safe=False,
install_requires=['distribute'],
)
Run Code Online (Sandbox Code Playgroud)
myapp/data/数据文件的位置在哪里.
我似乎突然开始遇到变量包(包括和)error: option --single-version-externally-managed not recognized时的错误.我之前从未见过这个错误,但它现在也出现在travis-ci版本中,没有任何改变.pip installPyObjCastropy
此错误是否表示过期分发?或者一些错误指定的选项setup.py?或完全不同的东西?
我正在使用带有virtualenv的pip来打包和安装一些Python库.
我想我正在做的是一个很常见的场景.我是几个库的维护者,我可以明确地指定依赖项.我的一些库依赖于第三方库,这些库具有我无法控制的传递依赖性.
我想要实现的是让pip install我的一个库下载/安装它的所有上游依赖项.我在pip文档中遇到的问题是,需求文件是否/如何自行完成,或者它们实际上只是对使用的补充install_requires.
我是否会install_requires在所有库中使用指定依赖项和版本范围,然后仅使用需求文件来解决冲突和/或冻结它们以进行生产构建?
让我们假装我生活在一个想象的世界(我知道,我知道),我的上游依赖是直截了当的,并保证永远不会冲突或破坏向后兼容性.我是否会被迫使用pip要求文件或者只是让pip/setuptools/distribute安装所有内容install_requires?
这里有很多类似的问题,但我找不到任何与使用其中一个或者和谐地使用它们一样基本的问题.
从github项目分发二进制文件的最佳实践是什么?
我能想到:
我的目标是分发一个Python包,其中包含其他几个广泛使用的Python包作为依赖项.我的包依赖于编写良好的Pypi索引包,如pandas,scipy和numpy,并在setup.py中指定需要某些版本或更高版本,例如"numpy> = 1.5".
我发现,对于那些不是 Python打包专家的Unix精明用户(即使他们知道如何编写Python)来安装像我这样的软件包,即使在使用易于使用的软件包管理器时,我也感到非常沮丧和几乎不可能.我想知道是否有一个替代这个痛苦的过程,有人可以提供,或者如果我的经验只是反映了Python包装和分发的当前状态非常困难.
假设用户将您的包下载到他们的系统上.大多数人会试图"天真地"安装它,使用类似的东西:
$ python setup.py install
Run Code Online (Sandbox Code Playgroud)
因为如果你有关于安装Python软件包的google说明,通常会出现这种情况.这对绝大多数用户来说都是失败的,因为大多数用户的Unix/Linux服务器上没有超级用户访问权限.通过更多搜索,他们将发现"--prefix"选项并尝试:
$ python setup.py install --prefix=/some/local/dir
Run Code Online (Sandbox Code Playgroud)
由于用户不知道Python包装的复杂性,他们会选择一个任意目录作为参数--prefix,例如"~/software/mypackage/".它不会是所有其他Python包所在的干净策划目录,因为大多数用户都不知道这些细节.如果他们安装另一个包"myotherpackage",他们可能会通过它"~/software/myotherpackage",你可以想象这将导致令人沮丧的黑客攻击PYTHONPATH和其他并发症.
继续安装过程,一旦用户尝试使用该包,调用"setup.py install"with "--prefix"也将失败,即使它似乎已正确安装,因为其中一个依赖项可能会丢失(例如pandas,scipy或numpy)和一个包经理没有使用.他们会尝试单独安装这些软件包.即使成功,包也将不可避免地PYTHONPATH归因于给出的非标准目录,"--prefix"并且患者用户将涉及修改它们PYTHONPATH以使得依赖性可见.
在这个阶段,Python精明的朋友可能会告诉用户他们应该使用像"easy_install"主流管理器这样的软件包管理器来安装软件并且需要处理依赖项.安装后"easy_install",这可能很难,他们会尝试:
$ easy_install setup.py
Run Code Online (Sandbox Code Playgroud)
这也将失败,因为用户通常无权在生产Unix服务器上全局安装软件.通过阅读更多,他们将了解该"--user"选项,并尝试:
$ easy_install setup.py --user
Run Code Online (Sandbox Code Playgroud)
他们会得到错误:
usage: easy_install [options] requirement_or_url ...
or: easy_install --help
error: option --user not recognized
Run Code Online (Sandbox Code Playgroud)
他们将非常困惑为什么他们easy_install没有--user选项,因为网上有明确的网页描述选项.他们可能会尝试将其升级easy_install到最新版本并发现它仍然失败.
如果他们继续并咨询Python包装专家,他们会发现有两个版本,两个版本easy_install都被命名为" …
我跑的时候
python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
它在我的./dist目录中创建了一个sdist.这包括我的"dist"文件夹中的zip中的"PROJECT-egg.info"文件,我没有使用它,但它不会伤害我,所以我只是忽略它.
我的问题是,为什么它也建立在我的项目根目录下的"PROJECT-egg.info"文件夹?我可以让它停止创建吗?如果没有,我可以在创建sdist后立即删除它吗?
我正在使用从setuptools导入的'setup'功能.WindowsXP,Python2.7,Setuptools 0.6c11,分发0.6.14.
我的设置配置如下:
{'author': 'Jonathan Hartley',
'author_email': 'tartley@tartley.com',
'classifiers': ['Development Status :: 1 - Planning',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python :: 2.7'],
'console': [{'script': 'demo.py'}],
'data_files': [('Microsoft.VC90.CRT',
['..\\lib\\Microsoft.VC90.CRT\\Microsoft.VC90.CRT.manifest',
'..\\lib\\Microsoft.VC90.CRT\\msvcr90.dll'])],
'description': 'Utilities for games and OpenGL graphics, built around Pyglet.\n',
'keywords': '',
'license': 'BSD',
'long_description': "blah blah blah",
'name': 'pygpen',
'options': {'py2exe': {'ascii': True,
'bundle_files': 1,
'dist_dir': …Run Code Online (Sandbox Code Playgroud) 我一直在通过"学习Python艰难之路"(第2版)这本书教自己.在练习46中,它告诉我阅读Pip,Distribute和其他一些软件包.
pip的文档很清楚.它允许我安装/卸载和升级包.阅读文档以进行分发,它基本上似乎做同样的事情:
轻松下载,构建,安装,升级和卸载Python包
点子和分发之间有什么区别,它们如何相互关联?
我试图pip install --upgrade pip在OSX 上升级pip,pip和easy_install都不起作用.
跑点的时候
Traceback (most recent call last):
File "/usr/local/bin/pip", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.49-py2.7.egg/pkg_resources.py", line 2881, in <module>
parse_requirements(__requires__), Environment()
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.49-py2.7.egg/pkg_resources.py", line 596, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==1.3.1
Run Code Online (Sandbox Code Playgroud)
运行easy_install时
File "/usr/local/bin/easy_install", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.49-py2.7.egg/pkg_resources.py", line 2881, in <module>
parse_requirements(__requires__), Environment()
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.49-py2.7.egg/pkg_resources.py", line 596, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: distribute==0.6.36
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
更新 我找到了解决方案.
我做到了 cd /usr/local/lib/python2.7/site-packages && ls
找到pip-1.4.1-py2.7.egg-info …
distribute ×10
python ×9
setuptools ×7
pip ×5
distutils ×2
setup.py ×2
binary ×1
github ×1
packaging ×1
virtualenv ×1