我讨厌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指令中放置了绝对路径.
我之所以这样问是双重的
我在python中编写了一个快速程序,为一个cli程序添加一个gtk GUI.我想知道如何使用distutils创建安装程序.因为它只是一个命令行应用程序的GUI前端,所以它只适用于*nix,所以我并不担心它是跨平台的.
我的主要目标是为debian/ubuntu用户创建一个.deb包,但我不懂make/configure文件.到目前为止,我主要是一名网络开发人员.
编辑:有没有人知道一个使用distutils的项目,所以我可以看到它在行动,你知道,实际上尝试构建它?
本指南非常有用.我不知道在最初的淘汰赛中我是如何错过的.它甚至会引导您完成现有python应用程序的打包
这是ubuntu的官方包维护项目.任何人都可以加入,并且有很多关于创建所有类型的包的教程和信息,其中包括上面的"python包装指南".
"Python会让人厌烦吗?" - Ars Technica论坛讨论
根据这个对话,你不能只使用distutils.它不遵循debian包装格式(或类似的东西).我想这就是你需要dh_make的原因,如Ubuntu Packaging指南中所示
这个有一些有趣的讨论(它也是我如何找到ubuntu指南)关于连接zip文件和shell脚本来创建某种通用可执行文件(任何使用python和bash的东西).奇怪的.如果有人发现有关此练习的更多信息,请告诉我,因为我从未听说过.
我有一个名为"example"的库,我将其安装到我的全局site-packages目录中.但是,我希望能够安装两个版本,一个用于生产,一个用于测试(我有一个Web应用程序和其他以这种方式版本化的东西).
有没有办法指定,比如"python setup.py stage",它不仅会将不同的蛋安装到site-packages中,还会将模块从"example"重命名为"example_stage"或类似的东西?
如果distutils无法做到这一点,还有其他工具吗?
上次我不得不担心安装Python软件包是两年前与Enthought,NumPy和MayaVi2合作的.这种经历给了我挥之不去的噩梦,这些噩梦与在非标准位置($HOME/usr/local2.6/例如)中安装和更新Python包的古怪行为有关.
无论如何,我的工作让我回到安装各种Python包.该Cheeseshop上教程中提到的distutils和EasyInstall除了扩建!我很难找到一个比较这些(和其他)PyPi安装工具的地方,所以我希望进入StackOverflow社区: 每个安装工具的优点和缺点是什么?
这是一个类似的问题我如何让setuptools安装一个不在PyPI上的软件包?但不一样.
由于我想使用某些包的分叉版本,setuptools会忽略依赖关系链接(因为它具有相同的版本号).
有没有办法强制使用dependency_links中的链接?或者是更改分叉回购中版本号的唯一方法?
requires = [
...
'pyScss==1.1.3'
...
dependencies = [
'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
]
Run Code Online (Sandbox Code Playgroud)
更新
奇怪的是,如果这个包是所需列表中唯一尚未安装的包,显然它可以工作.如果有另一个丢失的包,它将从pypi下载它.
假设你有一个名为的项目proj,在这个项目中你有以下结构:
proj/
dists/
doc/
src/
__init__.py
xyz.py
abc.py
test/
setup.py
Run Code Online (Sandbox Code Playgroud)
如您所见,项目的所有内容都在src子文件夹中.如何从src文件夹中制作distutils发行包?
我的天真想法,按照教程,将编写setup.py如下:
#omitting basics
setup(
name='proj',
packages=['src'],
package_dir={'proj':'src'}
)
Run Code Online (Sandbox Code Playgroud)
但是在将生成的软件包安装到我的系统之后,我仍然需要导入src.xyz而不是导入proj.xyz,这将是目标和预期的结果.
我有一个用python编写的工具,通常应该作为守护进程运行.打包此工具以进行分发的最佳做法是什么,尤其是如何处理设置文件和守护程序可执行文件/脚本?
相关的是,是否有任何常用的工具可以设置守护进程在开机时运行,以适合给定的平台(即linux上的init脚本,windows 上的服务,osx上的launchd)?
按照这个建议,我编写了一个本机C扩展库,通过ctypes优化Python模块的一部分.我之所以选择ctypes而不是编写CPython本地库,是因为它更快更容易(只有几个函数内部都有紧密的循环).
我现在遇到了障碍.如果我希望使用distutils可以轻松地安装我的工作python setup.py install,那么distutils需要能够构建我的共享库并安装它(可能是).但是,这不是一个Python扩展模块,所以据我所知,distutils不能这样做./usr/lib/myproject
我发现了一些对其他人有这个问题的引用:
我知道我可以做一些原生的东西而不是为共享库使用distutils,或者确实使用我的发行版的包装系统.我担心的是,这会限制可用性,因为不是每个人都能轻松安装它.
所以我的问题是:当前最好的分发共享库的方法是什么,这些方法将由ctypes使用,但是其他方面是OS本机而不是Python扩展模块?
如果您可以对其进行扩展并证明为什么这是最好的方法,请随意回答上面链接的其中一个黑客.如果没有更好的东西,至少所有的信息都会在一个地方.
我们有一个占位符egg,它不包含任何代码,只是为了从PyPi存储库中提取依赖包列表而存在.
这些依赖包大多数是与平台无关的,但有些只在Win32平台上使用.
是否有可能以某种方式使依赖平台有条件,以便我的install_requires列表中的给定依赖项只会在Win32上安装时被拉下来?
或者:是否可以指定可选依赖项列表,如果可用,将安装,但如果不是,则不会导致easy_install失败?
我正在尝试创建一个Python包,我有一个像这样的目录结构:
mypkg/
??? __init__.py
??? module1
? ??? x.py
? ??? y.py
? ??? z.txt
??? module2
??? a.py
??? b.py
Run Code Online (Sandbox Code Playgroud)
然后我添加了所有文件MANIFEST.in,当我检查创建的存档时,它有所有文件.
当我做python setup.py install的时候dist-packages/mypkg/module1.我只看到Python文件而不是z.txt.
我有z.txt两个MANIFEST.in和setup.py:
setup (
packages = [
'mypkg',
'mypkg.module1',
'mypkg.module2',
],
package_data = {
'mypkg': ['module1/z.txt']
},
include_package_data = True,
...
)
Run Code Online (Sandbox Code Playgroud)
我尝试添加该文件,data_files但是创建了一个目录/usr/local.我想将它保存在源代码目录中,因为代码使用该数据.
我已经阅读了下面列出的帖子,但我一直对于z.txt在正确的位置之后保持正确位置的方法感到困惑setup.py install.
distutils ×10
python ×10
setuptools ×4
easy-install ×2
buildout ×1
ctypes ×1
debian ×1
deployment ×1
distribute ×1
installer ×1
linux ×1
packaging ×1
pip ×1
python-2.7 ×1
virtualenv ×1