相关疑难解决方法(0)

247
推荐指数
5
解决办法
9万
查看次数

有希望的替代品?

多年来我一直在使用make和makefiles,虽然这个概念很合理,但实现还是有所不足.

有没有人找到任何好的替代方案,使不会使问题过于复杂?

build-automation makefile

74
推荐指数
7
解决办法
4万
查看次数

如何将其他文件添加到滚轮?

如何控制车轮中包含哪些文件?它似乎MANIFEST.in没有被使用python setup.py bdist_wheel.

更新:

从源tarball到wheel安装之间的区别我错了.源代码分发包括指定的文件MANIFEST.in,但安装的软件包只有python文件.需要步骤来识别应安装的其他文件,无论安装是通过源分发,egg还是wheel.也就是说,其他包文件需要package_data,而命令行脚本或系统配置文件需要包外的文件的data_files.

原始问题

我有一个项目,我一直python setup.py sdist用来构建我的包,MANIFEST.in控制包含和排除的文件,以及pyromacheck-manifest来确认我的设置.

我最近将它转换为双Python 2/3代码,并添加了一个setup.cfg

[bdist_wheel]
universal = 1
Run Code Online (Sandbox Code Playgroud)

我可以用python setup.py bdist_wheel它来制造一个轮子,它看起来像是一个万向轮.但是,它不包括指定的所有文件MANIFEST.in.

什么安装?

我挖得更深,现在更了解包装和轮子.这是我学到的东西:

我将两个包文件上传到PyPi上multigtfs项目:

  • multigtfs-0.4.2.tar.gz- 源tar球,包括所有文件MANIFEST.in.
  • multigtfs-0.4.2-py2.py3-none-any.whl - 有问题的二进制分布.

我创建了两个新的虚拟环境,都使用Python 2.7.5,并安装了每个包(pip install multigtfs-0.4.2.tar.gz).这两种环境几乎完全相同.它们有不同的.pyc文件,即"已编译"的Python文件.有记录磁盘上不同路径的日志文件.源tar球multigtfs-0.4.2-py27.egg-info的安装包括一个文件夹,详细说明安装,并且wheel安装有一个multigtfs-0.4.2.dist-info文件夹,其中包含该进程的详细信息.但是,从使用multigtfs项目的代码的角度来看,两种安装方法之间没有区别.

显然,我的测试使用的.zip文件都没有,因此测试套件将失败:

$ django-admin startproject demo
$ cd demo
$ pip …
Run Code Online (Sandbox Code Playgroud)

python pip python-wheel

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

交叉编译Python扩展

我在Buildroot Linux发行版ARM(Python 2.7.2)下交叉编译netifaces扩展时遇到了问题.根据这个博客http://whatschrisdoing.com/blog/2009/10/16/cross-compiling-python-extensions/我已经定义了CC,LDSHARE等环境变量,但是distutils/setuptools没有将CC带入帐户,所以所有测试都将失败:

running build
Setting prefix
Setting prefix
running build_ext
checking for getifaddrs... not found. (cached)
checking for getnameinfo... not found. (cached)
checking for socket IOCTLs... not found. (cached)
checking for optional header files... netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h linux/irda.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h. (cached)
checking whether struct sockaddr has a length field... no. (cached)
checking which sockaddr_xxx structs are defined... at ax25 in in6 ipx un ash ec ll  atmpvc atmsvc dn irda llc. (cached) …
Run Code Online (Sandbox Code Playgroud)

python distutils setuptools cross-compiling

15
推荐指数
1
解决办法
5949
查看次数

不使用gcc安装psutil

到目前为止,我们通过自定义pypi服务器安装了psutil.

现在我们有了一个新的环境,我们不应该安装gcc.

现在旧的方式(pip在安装期间启动gcc)不再起作用了.

上下文:

  • Linux服务器
  • 在virtualenv里面的python
  • 所有代码都需要从我们的数据中心部署(无需访问Internet)

我看到了这些替代品:

RPM

创建一个RPM.因为我们已经用--system-site-packages这个作品来运行我们的virtualenv .这迫使服务器上的所有virtualenvs使用相同的版本psutil.但这不是什么大问题.

我从来没有用过那个.

冻结

使用像这样的工具cx_freeze.我以前从未这样做过.

其他方案?

我想还有其他的,可能更好的方法来解决这个问题.

背景

psutil在这种情况下只是一个例子.其他包含c扩展的python包也出现了同样的问题.想象一下,这里还没有RPM.

python gcc setup.py python-packaging

8
推荐指数
1
解决办法
3527
查看次数

如何在Python包中包含共享C库

我有一个项目取决于共享库.从头开始说明:共享库是纯C库而不是Python库.为简单起见,我创建了一个名为pkgtest的小型演示项目,我将参考该项目.

所以需要做的是:运行Makefile来编译库并将编译好的共享库(libhello.so此处称为)文件放在某个地方,可以从依赖Python包中访问它.

到目前为止,我最好的猜测是将makefile作为预安装例程运行,将libhello.so文件复制到packages目录中并将其添加到package_data安装脚本的参数中.安装后,共享库将被放置在site-packages/pkgtest/目录中,并可从模块访问.

包目录的结构就像这样简单:

pkgtest/
  src/
     libhello.c
     libhello.h
     Makefile
  pkgtest/
    __init__.py
    hello.py
  setup.py
Run Code Online (Sandbox Code Playgroud)

我的setup.py看起来像这样:

setup.py

import subprocess
from setuptools import setup
from distutils.command.install import install as _install


class install(_install):
    def run(self):
        subprocess.call(['make', 'clean', '-C', 'src'])
        subprocess.call(['make', '-C', 'src'])
        _install.run(self)


setup(
    name='pkgtest',
    version='0.0.1',
    author='stefan',
    packages=['pkgtest'],
    package_data={'pkgtest': ['libhello.so']},
    cmdclass={'install': install},
)
Run Code Online (Sandbox Code Playgroud)

Makefile实际上构建了库并将其复制到我的python包的目录中.

SRC/Makefile文件

all: libhello.so

libhello.o: libhello.c
        gcc  -fPIC -Wall -g -c libhello.c

libhello.so: libhello.o
        gcc -shared -fPIC -o libhello.so libhello.o
        cp …
Run Code Online (Sandbox Code Playgroud)

python makefile setuptools

7
推荐指数
1
解决办法
2522
查看次数