标签: distutils

别碰我的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万
查看次数

如何使用Python distutils?

我在python中编写了一个快速程序,为一个cli程序添加一个gtk GUI.我想知道如何使用distutils创建安装程序.因为它只是一个命令行应用程序的GUI前端,所以它只适用于*nix,所以我并不担心它是跨平台的.

我的主要目标是为debian/ubuntu用户创建一个.deb包,但我不懂make/configure文件.到目前为止,我主要是一名网络开发人员.

编辑:有没有人知道一个使用distutils的项目,所以我可以看到它在行动,你知道,实际上尝试构建它?

这里有一些有用的链接

python linux installer debian distutils

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

自定义distutils命令

我有一个名为"example"的库,我将其安装到我的全局site-packages目录中.但是,我希望能够安装两个版本,一个用于生产,一个用于测试(我有一个Web应用程序和其他以这种方式版本化的东西).

有没有办法指定,比如"python setup.py stage",它不仅会将不同的蛋安装到site-packages中,还会将模块从"example"重命名为"example_stage"或类似的东西?

如果distutils无法做到这一点,还有其他工具吗?

python deployment distutils

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

Python包装状态:Buildout,Distribute,Distutils,EasyInstall等

上次我不得不担心安装Python软件包是两年前与Enthought,NumPyMayaVi2合作的.这种经历给了我挥之不去的噩梦,这些噩梦与在非标准位置($HOME/usr/local2.6/例如)中安装和更新Python包的古怪行为有关.

无论如何,我的工作让我回到安装各种Python包.该Cheeseshop上教程中提到的distutils和EasyInstall除了扩建!我很难找到一个比较这些(和其他)PyPi安装工具的地方,所以我希望进入StackOverflow社区: 每个安装工具的优点和缺点是什么?

python distutils buildout easy-install distribute

24
推荐指数
3
解决办法
3092
查看次数

如何让setuptools从另一个源安装一个包,该源也可以在pypi上使用相同的版本号?

这是一个类似的问题我如何让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下载它.

python distutils pip setuptools easy-install

24
推荐指数
2
解决办法
8304
查看次数

setup.py:将src包重命名为项目名称

假设你有一个名为的项目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 distutils python-2.7

24
推荐指数
4
解决办法
6852
查看次数

Python守护程序打包最佳实践

我有一个用python编写的工具,通常应该作为守护进程运行.打包此工具以进行分发的最佳做法是什么,尤其是如何处理设置文件和守护程序可执行文件/脚本?

相关的是,是否有任何常用的工具可以设置守护进程在开机时运行,以适合给定的平台(即linux上的init脚本,windows 上的服务,osx上的launchd)?

python packaging distutils setuptools

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

使用distutils构建一个基于ctypes的"基础"C库

按照这个建议,我编写了一个本机C扩展库,通过ctypes优化Python模块的一部分.我之所以选择ctypes而不是编写CPython本地库,是因为它更快更容易(只有几个函数内部都有紧密的循环).

我现在遇到了障碍.如果我希望使用distutils可以轻松地安装我的工作python setup.py install,那么distutils需要能够构建我的共享库并安装它(可能是).但是,这不是一个Python扩展模块,所以据我所知,distutils不能这样做./usr/lib/myproject

我发现了一些对其他人有这个问题的引用:

我知道我可以做一些原生的东西而不是为共享库使用distutils,或者确实使用我的发行版的包装系统.我担心的是,这会限制可用性,因为不是每个人都能轻松安装它.

所以我的问题是:当前最好的分发共享库的方法是什么,这些方法将由ctypes使用,但是其他方面是OS本机而不是Python扩展模块?

如果您可以对其进行扩展并证明为什么这是最好的方法,请随意回答上面链接的其中一个黑客.如果没有更好的东西,至少所有的信息都会在一个地方.

python ctypes distutils

23
推荐指数
2
解决办法
2598
查看次数

是否有可能在setup.py中表达特定于平台的依赖关系而无需构建特定于平台的版本的egg?

我们有一个占位符egg,它不包含任何代码,只是为了从PyPi存储库中提取依赖包列表而存在.

这些依赖包大多数是与平台无关的,但有些只在Win32平台上使用.

是否有可能以某种方式使依赖平台有条件,以便我的install_requires列表中的给定依赖项只会在Win32上安装时被拉下来?

或者:是否可以指定可选依赖项列表,如果可用,将安装,但如果不是,则不会导致easy_install失败?

python distutils setuptools

22
推荐指数
3
解决办法
6786
查看次数

MANIFEST.in,package_data和data_files澄清?

我正在尝试创建一个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.insetup.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.

python distutils setuptools

22
推荐指数
2
解决办法
5088
查看次数