我有一个 Python 包,我想把它做成一个轮子。在 Python 2 上,包使用ipaddr库。在 Python 3 上,它使用内置ipaddress库。对于sdist包,我签sys.version_info入setup.py以根据 Python 版本设置要求。不幸的是,这似乎不适用于轮子。是否可以基于带有轮子的 Python 版本进行条件依赖?
我意识到一个与此相关的问题已经被问到无法从轮式安装numpy,但是那里提出的解决方案对我不起作用.我也问过那个帖子(通过回答!)但是我没有得到任何回复,所以这里有:
我一直在尝试安装matplotlib,但我首先需要安装numpy.我下载了文件numpy-1.8.2 + mkl-cp26-none-win_amd64.whl,然后尝试使用pip安装它.我一直得到的错误信息是:
"numpy-1.8.2 + mkl-cp26-none-win_amd64.whl不是这个平台上支持的轮子".我在上面引用的线程建议的解决方案是将"_amd64"替换为"32",使文件名为numpy-1.8.2 + mkl-cp26-none-win32.whl.这也不起作用,我得到与上面完全相同的错误.
有什么建议?
我在Windows 7 64位上使用64位64位Python.
如果我构建一个包python setup.py bdist_wheel,生成的包将扩展setup.py中列出的脚本中的shebang,setup(scripts=["script/path"])以使用我的python可执行文件的绝对路径#!/home/f483/dev/storj/storjnode/env/bin/python.
这显然是一个问题,因为使用滚轮的任何人都没有这个设置.它似乎没有什么区别我正在使用什么样的shebang.
我们目前正在运行我们自己的私有 PyPi 服务器,并上传我们内部 Python 库的轮子以加快安装速度。
我们的许多工具都需要 numpy、scipy、pandas 等。
通过从源代码安装所有依赖项,然后使用,我们为所有依赖项构建了轮子
pip wheel .
Run Code Online (Sandbox Code Playgroud)
它为我们所有的依赖项输出轮子 - 或者我们是这么认为的。
我们发现,当我们从我们的私有 PyPi 安装 numpy 时,它可以作为轮子使用,会发生以下情况。
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "redacted/lib/python2.7/site-packages/numpy/__init__.py", line 199, in <module>
from . import random
File "redacted/site-packages/numpy/random/__init__.py", line 99, in <module>
from .mtrand import *
ImportError: redacted/lib/python2.7/site-packages/numpy/random/mtrand.so: undefined symbol: PyFPE_jbuf
Run Code Online (Sandbox Code Playgroud)
我很清楚这些轮子没有正确创建。我不清楚的是如何解决这个问题。我们不会将这些分发给公众,仅用于我们的内部工具。
一个轮子是通过PIP安装分发预编译包的新途径。
pypi上的lxml 条目具有可用于“manylinux”的轮子。我正在运行 ubuntu。
但是,当我尝试 pip install lxml 时,它似乎仍然尝试编译。任何想法为什么?
mktmpenv
pip install lxml==3.6.4
Collecting lxml==3.6.4
Using cached lxml-3.6.4.tar.gz
Building wheels for collected packages: lxml
Running setup.py bdist_wheel for lxml
Complete output from command /home/harry/.virtualenvs/tmp-940224e01c89b3f0/bin/python3 -c "import setuptools;__file__='/tmp/pip-build-gxw05tyo/lxml/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmp78u4a871pip-wheel-:
Building lxml version ....
Building lxml version 3.6.4.
Building without Cython.
Using build configuration of libxslt 1.1.29
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.5
[...etc]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我有一个 python wheel 包,在提取时我找到了一些 python 代码,我想编辑这段代码并再次重新生成相同的 .whl 包并测试它以查看编辑。我该怎么做?
我有一个 Dockerfile 正在尝试whl使用pip. 我想强制在搜索中pip包含我的whl文件,但它没有:
No distributions matching the version for mylibname==mylibversion
Run Code Online (Sandbox Code Playgroud)
我尝试使用build_extwith options -L:
pip install --global-option=build_ext --global-option="-L/directory/containing/whl/file/"
Run Code Online (Sandbox Code Playgroud)
-I:
pip install --global-option=build_ext --global-option="-I/directory/containing/whl/file/"
Run Code Online (Sandbox Code Playgroud)
和-b:
pip install --global-option=build_ext --global-option="-b/directory/containing/whl/file/"
Run Code Online (Sandbox Code Playgroud)
但他们都没有工作。
编辑 1:
这是我的Dockerfile:
FROM python:2.7.9
MAINTAINER Zeinab Abbasimazar
ADD myprojectdir .
RUN ls -la ${HOME}/myprojectdir/dependency
RUN pip --version
RUN pip install --global-option=build_ext --global-option="-L${HOME}/myprojectdir/dependency" mypackagename-mypackageversion
WORKDIR .
CMD python --version
Run Code Online (Sandbox Code Playgroud)
这是输出docker build -t myimagename . …
我是python的新手,我正在尝试使用.whl文件安装一些模块/包.系统无法访问互联网,因此一切都是本地的.
Python是2.7.12版本(以2.6为单位)
platform.architecture()('64bit','ELF')
我正在运行pip 9.0.1
尝试安装numpy:
# /usr/local/bin/pip2.7 install numpy-1.13.3-cp27-cp27m-manylinux1_x86_64.whl
numpy-1.13.3-cp27-cp27m-manylinux1_x86_64.whl is not a supported wheel on this platform.
Run Code Online (Sandbox Code Playgroud)
那我错过了什么?
有没有办法,使用setup.py,安装python包作为wheel/pip风格的包(即dist-info)而不是setup.py默认情况下的egg安装(即egg-info)?
例如,如果我有一个带有setup.py脚本的python包,并且我运行以下命令,它将把包安装为egg.
> python setup.py install
Run Code Online (Sandbox Code Playgroud)
但是,我可以先构建一个轮子,然后使用pip将该轮子安装为wheel/dist-info类型的安装
> python setup.py bdist_wheel
> pip install ./dist/package-0.1-py2-none-any.whl
Run Code Online (Sandbox Code Playgroud)
有没有办法直接安装包作为wheel/dist-info安装setup.py?或者是同时使用两个步骤setuptools和pip必要吗?
我有一个使用以下命令创建Python轮子的构建过程:
python setup.py bdist_wheel
Run Code Online (Sandbox Code Playgroud)
构建过程可以在许多平台(Windows,Linux,py2,py3等)上运行,我想保留默认输出名称(例如mapscript-7.2-cp27-cp27m-win_amd64.whl)以上传到PyPI。
无论如何,是否有获取生成的车轮的文件名(例如mapscript-7.2-cp27-cp27m-win_amd64.whl)并保存到变量,以便稍后可以在脚本中安装车轮以进行测试?
理想的解决方案是跨平台。我当前的方法是尝试清除文件夹,列出所有文件,然后选择列表中的第一个(也是唯一一个)文件,但是,这似乎是一个非常棘手的解决方案。
python ×10
python-wheel ×10
pip ×5
numpy ×2
python-2.7 ×2
docker ×1
dockerfile ×1
lxml ×1
matplotlib ×1
pypiserver ×1
python-3.x ×1
setup.py ×1
setuptools ×1
shebang ×1
ubuntu ×1