我有一个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可以在这里找到.
我有一个软件包,其中包含针对五种不同OS和体系结构组合的二进制文件:Windows 32位和64位,Linux 32位和64位以及OS X(胖)。的内容setup.py可以在这里找到。
我知道可以(确实更可取)将平台特定的轮子上传到PyPI,而不是上传一个包含所有平台甚至源代码发行版二进制文件的轮子,而后者之所以我不能做,是因为某些二进制文件是专有的(但可重新分发)。
我的问题是,我将如何为每个平台创建单独的轮子?特别:
package_data吗?请注意,在建立Linux轮子的命名约定之前,我目前不打算维护单独的轮子。
我需要在numpy包中使用一个函数,比如numpy.random.choice(另一个 Python lib 函数random.choice对列表进行统一采样,而我希望它从一些离散分布中做到这一点)。
我的程序将分发给很多人进行开发和测试。所以这意味着他们还应该numpy在能够运行代码之前安装。我现在正试图找到一种方法来摆脱安装整个 numpy 库。
肯定自己重写函数是一种解决方案(例如使用别名方法)。但我想知道有没有一种方法可以只安装numpy相关的部分numpy.random.choice?
通过轮子安装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 界面显示“非零退出代码”。这如何修复,没有其他可见的错误?
我按照Packaging and Distributing Projects创建了一个 Python 包上传到 Artifactory。在 my 中setup.py,我指定了name='foo_bar'然后我跑了python setup.py bdist_wheel。我注意到在egg-info\PKG-INFO中name被更改为foo-bar。这也决定了上传时 Artifactory 上的包文件夹名称。但是,我喜欢保持它与我在 中指定的相同setup.py,知道为什么会这样吗?好像bdist_wheel自动转换_为-.
我有几个项目,都包含setup.py和requirements.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模块,称之为'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) 据我所知,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包.我使用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项目.项目A和项目B.
每个项目都有自己的虚拟环境和自己的setup.py.
这两个项目都不是纯py文件,并且具有"构建"过程,如构建扩展,生成源等.
A依赖于B(B上的setup.py install_requires点).
每个项目都作为一个轮子构建和发布/分发到pypi内部部署存储库.
pip install w/wo -e(项目A的开发模式),很好地将项目B安装到项目A venv站点包中.
到目前为止,一切都运行良好,"按书".
现在,我的故事变得复杂......
我想一起开发这两个项目,而不必按顺序A发布B来使用它.
例如,我想:
我实际上想要项目A的pip install -e也可以在开发模式下安装项目B.
经过一些阅读后,我理解(希望是正确的)可以通过--find-links标志将"分发"定义为本地源文件夹.
我在--find-links中定义了项目B根文件夹.
我尝试了(在项目A setup.py文件夹上):
点子安装.-e --find-links = file:/// path/to/B.
点子安装.-e --find-links = git + file:// path/to/B.
两者都没用.
BTW,在通往B轮或B蛋的路径中,
例如:pip安装.-e --find-links = file:///path/to/B.whl
确实有效,但这不是我想要的.
希望你还在我身边:-)(对于这个乏味的故事感到抱歉)
我错过了什么?
TX
python-wheel ×10
python ×9
pip ×8
python-3.x ×2
setuptools ×2
distutils ×1
numpy ×1
pycharm ×1
python-2.7 ×1
uninstall ×1
virtualenv ×1