标签: python-wheel

强制Python包setup.py bdist_wheel在子目录中包含二进制文件

我有一个Python包,其中包括bin_win32,bin_win64,bin_osx,bin_lnx32,并bin_lnx64与二进制文件相应的平台,这是我通过Python文件调用子目录steamcloud.py.当我运行时python setup.py bdist_wheel --universal,生成的轮子不包括这些子目录中的文件,只包括Python文件.如何将这些包含在方向盘中?

注意:我知道1)该--universal标志仅适用于Python包,2)我应该为每个平台创建单独的轮子.但是,我无法访问Windows或Linux计算机进行开发,并且没有特定于Linux的轮子的命名约定.

内容setup.py可以在这里找到.

python pip python-wheel

6
推荐指数
1
解决办法
1080
查看次数

从一个主机操作系统为不同的操作系统创建不同的轮子

我有一个软件包,其中包含针对五种不同OS和体系结构组合的二进制文件:Windows 32位和64位,Linux 32位和64位以及OS X(胖)。的内容setup.py可以在这里找到。

我知道可以(确实更可取)将平台特定的轮子上传到PyPI,而不是上传一个包含所有平台甚至源代码发行版二进制文件的轮子,而后者之所以我不能做,是因为某些二进制文件是专有的(但可重新分发)。

我的问题是,我将如何为每个平台创建单独的轮子?特别:

  • 我可以在单个目录中使用不同的文件名和多个设置脚本package_data吗?
  • 我可以自动创建带有指示目标操作系统和体系结构的文件名的转盘吗?
  • 如果没有,我可以手动更改文件名吗?

请注意,在建立Linux轮子的命名约定之前,我目前不打算维护单独的轮子。

python pip python-wheel

6
推荐指数
1
解决办法
652
查看次数

如何“部分”安装 Python 包

我需要在numpy包中使用一个函数,比如numpy.random.choice(另一个 Python lib 函数random.choice对列表进行统一采样,而我希望它从一些离散分布中做到这一点)。

我的程序将分发给很多人进行开发和测试。所以这意味着他们还应该numpy在能够运行代码之前安装。我现在正试图找到一种方法来摆脱安装整个 numpy 库。

肯定自己重写函数是一种解决方案(例如使用别名方法)。但我想知道有没有一种方法可以只安装numpy相关的部分numpy.random.choice

python numpy pip python-wheel

6
推荐指数
1
解决办法
695
查看次数

从pip安装轮子或模块后,Pycharm Virtulenv“非零退出代码”

通过轮子安装kivy后,当我刷新python 3.4的虚拟环境时,我在Pycharm中遇到了错误。错误在该部分

Pycharm:项目 -> 项目解释器 -> [Virtualenv 包]

底部的错误/警告显示“非零退出代码”

我的环境:Windows 8.1 64-bit Python 3.4.3 32-bit Pycharm 4.5.4 Virtual env - 3.4.3

这是在我从命令行从“ http://www.lfd.uci.edu/~gohlke/pythonlibs/ ”(这是一个很棒的网站......检查出来)安装一个轮子之后发生的。

首先,我从位于“ http://www.lfd.uci.edu/~gohlke/pythonlibs/ ”的下载轮文件安装了pygame :

C:\Users\<user_name>\3.4Python_32Bit\Scripts> pip3.4.exe install C:\Users\<user_name>\Downloads\pygame-1.9.2a0-cp34-none-win32.whl
Run Code Online (Sandbox Code Playgroud)

接下来我调整 cython 版本:

C:\Users\<user_name>\3.4Python_32Bit\Scripts> pip3.4.exe install -I Cython==0.21.2
Run Code Online (Sandbox Code Playgroud)

然后我通过 pycharm 中的 pycharm virtualenv 接口安装了 kivymd 和 kivy Garden - 两者都安装成功。

最后我尝试安装“kivy”

结果最初很好,它显示已安装,包加载到 pycharm 中的 virtualenv 中,但是当我在 pycharm 中重新加载 virtualenv 以将其关联到包时,pycharm 界面显示“非零退出代码”。这如何修复,没有其他可见的错误?

python virtualenv pycharm virtualenv-commands python-wheel

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

Python包轮PKG-INFO名称

我按照Packaging and Distributing Projects创建了一个 Python 包上传到 Artifactory。在 my 中setup.py,我指定了name='foo_bar'然后我跑了python setup.py bdist_wheel。我注意到在egg-info\PKG-INFOname被更改为foo-bar。这也决定了上传时 Artifactory 上的包文件夹名称。但是,我喜欢保持它与我在 中指定的相同setup.py,知道为什么会这样吗?好像bdist_wheel自动转换_-.

python python-2.7 python-wheel

6
推荐指数
1
解决办法
903
查看次数

如何构建包含依赖项的 Python 项目?

我有几个项目,都包含setup.pyrequirements.txt。是否可以将整个项目打包在一个文件中,包括所有已编译并准备安装的要求?

我尝试过的:

python setup.py bdist_wheel
Run Code Online (Sandbox Code Playgroud)

构建一个.whl文件并将其放入dist目录中。轮子不包含任何依赖项。

pip wheel -r requirements.txt -w wheelhouse
Run Code Online (Sandbox Code Playgroud)

为每个需求构建轮子并将其放在wheelhouse目录中。例如,包括精心编译的代码numpy(我知道我必须在我希望它以后运行的每个平台上构建它,这很好)。

似乎我只是错过了最后一块拼图。

python pip python-wheel

6
推荐指数
1
解决办法
3004
查看次数

pip uninstall:"没有找到要卸载的文件."

我创建了一个python模块,称之为'foo_bar'.

我可以安装它,我可以升级它,但我无法卸载它.

我使用bdist_wheel构建我的模块:

$ python3 setup.py bdist_wheel
Run Code Online (Sandbox Code Playgroud)

我按如下方式安装和升级它:

$ python3 -m pip --timeout 60 install --upgrade dist/foo_bar-1.4.3-py3-none-any.whl
Run Code Online (Sandbox Code Playgroud)

它列在Python 3.4框架目录中:

ls -al /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/
drwxr-xr-x   12 samwise  admin     408 Jun 21 02:50 foo_bar
drwxr-xr-x    9 samwise  admin     306 Jun 21 02:50 foo_bar-1.4.3.dist-info
Run Code Online (Sandbox Code Playgroud)

它在pip冻结中列出:

$ python3 -m pip freeze
foo-bar==1.4.3
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试执行pip uninstall,则无法找到它的文件

$ python3 -m pip uninstall foo-bar
Can't uninstall 'foo-bar'. No files were found to uninstall.
Run Code Online (Sandbox Code Playgroud)

我在setup.py中做错了什么,因为它在卸载期间无法找到我的模块文件?

版本信息如下:

$ python3 --version
Python 3.4.4
$ …
Run Code Online (Sandbox Code Playgroud)

uninstall pip python-3.x python-wheel

6
推荐指数
4
解决办法
4344
查看次数

Python轮子名称中的'cp3xm'和'cp2xm'是什么意思?

据我所知,pythonwheel的命名规则是

package_version-related_python_version-none-32bits_or_64bits.whl
Run Code Online (Sandbox Code Playgroud)

例如,

numpy?1.11.2+mkl?cp35?none?win_amd64.whl
Run Code Online (Sandbox Code Playgroud)

在 Windows 64 位平台上运行的 Python3.5 是 1.11.2 版本的 numpy。 参考

目前我注意到Python 扩展包的非官方 Windows 二进制文件中 Python 包的命名使用“cpxxm”替换“none”。例如,

numpy?1.11.2+mkl?cp35?cp35m?win_amd64.whl
Run Code Online (Sandbox Code Playgroud)

安装这些包时,pip 会返回 version unmatch 错误。当我将 'cp35m' 更改为 'none' 时,它变得正常。

那么,'cp2xm' 'cp3xm' 是什么意思,为什么突然所有的包都用 'cpxxm' 替换了 'none'?

python pip python-wheel

6
推荐指数
1
解决办法
1373
查看次数

如果PyPI上存在依赖关系,Pip会忽略依赖于链接的依赖链接

我正在打包我自己的Python包.我使用setuptools和wheel来捆绑它和pip进行安装(在开发模式和测试PyPI存储库中).

每个用于安装包的pip命令都在--process-dependency-links这里使用.我将放下此选项以进行简化,此选项将隐含在此处.

其中一个依赖项在PyPI中被破坏,但在开发存储库问题已修复.我知道哪个提交修复了这个问题,我知道它的SHA-1总和,所以我知道要下载哪个tarball.所以我在setup.py文件中这样做了:

...
install_requires=[
    'hbmqtt>0.9.0'
],
dependency_links=[
    'https://github.com/beerfactory/hbmqtt/archive/f4330985115e3ffb3ccbb102230dfd15bb822a72.zip#egg=hbmqtt-0.9.1'
],
...
Run Code Online (Sandbox Code Playgroud)

当我在开发模式下安装软件包(通过setuptools和pip)时,从git repo下载软件包.然后我可以分发我的包的源代码.

python setup.py sdist
twine upload -s --sign-with gpg2 -r testpypi dist/<pkg-name>-<version>.tar.gz
Run Code Online (Sandbox Code Playgroud)

然后我可以从PyPI安装它.如果我没有同时设置--no-cache-dir--no-binary :all:选项(--no-cache-dir只需要确保没有从缓存中安装包),首先安装看起来没问题.Pip下载源然后制作轮子.解决依赖关系很顺利,一切看起来都还可以.Pip下载适当版本的(在我的示例中)HBMQTT包并安装它.同时pip制作轮子然后缓存它.所以,第二次安装(无--no-binary选项明显的理由,并与--upgrade-I期权)失败,因为不满足要求:PIP不能与0.9.1版本找到HBMQTT包.PyPI中HBMQTT的最新版本是0.9.0.因此pip在尝试从wheel包安装时不会处理依赖关系链接.

当我尝试制作wheel(python setup.py bdist_wheel)并将其上传到测试PyPI时,会发生同样的事情.从PyPI安装失败以及从下载(或由我制作)轮文件失败.

我认为麻烦位于点或轮.我不知道哪一个负责从车轮安装.

所以我的问题是我现在应该做些什么?对于这种情况,确实存在哪些变通办法?我认为只有分支要求HBMQTT仓库并制作我自己的包,直到PyPI破坏了包裹.

python distutils pip setuptools python-wheel

6
推荐指数
1
解决办法
746
查看次数

python pip - 具有本地依赖关系的开发模式

背景

我有两个python项目.项目A和项目B.

每个项目都有自己的虚拟环境和自己的setup.py.

这两个项目都不是纯py文件,并且具有"构建"过程,如构建扩展,生成源等.

A依赖于B(B上的setup.py install_requires点).

每个项目都作为一个轮子构建和发布/分发到pypi内部部署存储库.

pip install w/wo -e(项目A的开发模式),很好地将项目B安装到项目A venv站点包中.

到目前为止,一切都运行良好,"按书".

现在,我的故事变得复杂......

我想一起开发这两个项目,而不必按顺序A发布B来使用它.

例如,我想:

  1. 改变B中的东西.
  2. 构建B(setup.py构建).
  3. 不要将B作为轮子发布到pypi.
  4. 目标 - 项目A将"知道"修改后的项目B. 无需手动调整sys.path.

我实际上想要项目A的pip install -e也可以在开发模式下安装项目B.

经过一些阅读后,我理解(希望是正确的)可以通过--find-links标志将"分发"定义为本地源文件夹.

我在--find-links中定义了项目B根文件夹.

我尝试了(在项目A setup.py文件夹上):

  1. 点子安装.-e --find-links = file:/// path/to/B.

  2. 点子安装.-e --find-links = git + file:// path/to/B.

两者都没用.

BTW,在通往B轮或B蛋的路径中,

例如:pip安装.-e --find-links = file:///path/to/B.whl

确实有效,但这不是我想要的.

希望你还在我身边:-)(对于这个乏味的故事感到抱歉)

我错过了什么?

TX

python pip setuptools python-3.x python-wheel

6
推荐指数
1
解决办法
829
查看次数