问题标签 [python-packaging]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何从包中的兄弟模块导入?
我的包具有以下结构:
signal.py 包含:
plot.py 包含:
然后,我的脚本使用了这个包,其中包含以下内容:
当我运行它时,我得到一个属性错误:module 'myPackage' has no attribute 'plot'
我不确定为什么它plot
在我的包中的一个模块时被称为属性,或者为什么它被myPackage
称为模块。
然后我尝试导入我的包并以不同的方式调用该函数:
但是,现在我收到一个导入错误:cannot import name 'build_filter'
并且回溯指的是plot.py
它试图build_filter()
从同级模块导入函数的位置。
我认为这与这两个模块正在使用彼此的函数并递归导入另一个模块这一事实有关。
组织这个包以便兄弟模块可以相互导入函数的正确方法是什么?
python - Python package can't import neighbor subpackage when called from outside
I created a simple package to illustrate this problem. Here's the file structure:
sub_a
has a function foo
:
sub_b
has a function foobar
that calls foo
:
In the main file, I import foobar
without issues:
If I run the package with python pypkg
it works just fine. The problem starts when I try to use foobar
from outside. I added pypkg
to the path but when I try to import foobar
it raises an ImportError
exception. Here is a demo:
The ImportError
happens not because it cannot find sub_b
-- it can -- the problem happens because the package cannot import its own "neighbor subpackage". Which brings us to the question: How to properly import foobar
from outside?
I made an extensive research on the topic and the vast majority of questions on SO are people that didn't place __init__.py
files, observe this is not the issue here.
python - 是否有检查 Python 分发 (sdist) 文件的工具?
我们曾经在 PyPI 上发布了 Python 源代码分发 (sdist) 文件,但有一个问题在发布后才注意到。即对于某些文件,权限设置为不允许所有人读取,然后在某些情况下,在用户使用sudo
.
我们正在考虑启动我们自己的脚本来检查这个问题的 sdist 并在上传到 PyPI 之前运行它。
是否有工具(或 setuptools 或 twine 或其他地方的东西)在上传之前在 sdist 上运行此或其他基本检查?
python - setup.py -- 私人/商业项目的配置
我可以在我们的setup.py
项目配置文件中添加什么来告诉开发人员该项目是私有/商业应用程序/库。
目前我设置:
有什么最佳做法吗?
笔记:
如今,大多数项目都是开源的,并坚持许可证模型。但是,当您在该行业工作时,软件是私有的。我的公司与可能不知道软件可以是私有的事实的离岸公司合作。setup.py
因此,我想通过在文件中指定这一点来引起他们的注意。这就是为什么我正在寻找最佳实践。
结论/解决方案
对于私人/专有应用程序,我将遵循rth 的建议:
- 将许可属性设置为“专有”,
- 添加分类器“许可证 :: 其他/专有许可证”,
- 也许添加一个
LICENSE
文件。
模板将是这样的:
另一种方法是设置“非开源”,就像在cookiecutter-pypackage模板中定义的那样。
python - 使用 pip 安装时要求不安装的要求
使用pip安装时,没有安装需求的需求。
重复数据删除需要
pylbfgs,这需要numpy 1.12.1
或更高。
但是当我从目录安装重复数据删除
我原以为 pip 会检查 a 的要求pylbfgs
并看到 anumpy >= 1.12.1
是必要的,但这并没有发生。我不知道它是否与pip
检查numpy
依赖关系Levenshtein_search
并发现它被满足有关。
完整的追溯在这里:https ://travis-ci.org/dedupeio/dedupe/jobs/232943131
python - 我应该如何处理在我的 setup.py 脚本中导入第三方库?
我正在开发一个 Python 应用程序,并且正在分支一个版本。我在公司服务器上设置了一个 PyPI 服务器,并将我的包的源代码分发复制到它上面。
我检查了该软件包是否托管在服务器上,然后尝试将其安装在我的本地开发机器上。我最终得到了这个输出:
appdirs
原因是我试图在 my中导入第三方库setup.py
,这对我计算data_files
参数是必要的setup()
:
但是,我没有appdirs
在我的本地开发机器上安装它,我也不希望最终用户拥有它。
在 中依赖这样的第三方库是否可以接受setup.py
,如果可以,推荐使用它们的方法是什么?有没有一种方法可以确保appdirs
在导入之前安装它setup.py
,或者我应该只记录appdirs
安装我的包所需的包?
python - 具有分发特定要求的 Python 包
我想为具有 Linux 发行版特定要求的 python 创建一个 rpm 包。具体来说,我想构建一个适用于 Amazon Linux、CentOS 7.x 和 RHEL 7.x(最后两个可能是 6.x)的 rpm。我目前正在使用 setuptools 来构建一个包。
问题是某些包要求在不同的发行版中没有相同的名称。现在,我有一个包含如下部分的setup.cfg
文件bdist_rpm
,其中第一行与 Amazon Linux 相关,而第二行与 RHEL 7.x 相关。
我知道我可以先创建一个 .spec 文件(使用该bdist_rpm --spec-only
选项),然后使用此处给出的 dist 标签:https ://fedoraproject.org/wiki/Packaging:DistTag 。但是有没有一种方法可以让我直接使用 setuptools 来做到这一点?我可以在 setup.cfg 文件或 MANIFEST.in 文件中指定分发特定要求吗?
python - 自定义安装后脚本未使用 pip 运行
请在标记为重复之前,我已经尝试了一堆解决方案,包括一个这里 但没有运气
我创建了一个简单的工具来完成一些任务,并且能够成功打包它。
尝试安装它时,我在使用时得到了预期的效果,python setup.py install
但pip install package_name
只是安装了软件包但没有安装后脚本。
这是我的代码的一部分;
安装程序.py
脚本.py
谢谢 :)
PS我pip install
上传包后运行。
python - 从 Github 下载的模块未导入
我正在尝试在 Github 上创建自己的 python 包,以便可以将其安装在任何机器上。它正在安装并且模块在那里,pip3 freeze
但是有一个导入错误。
我搜索了“pip 中的模块导入错误”,但找不到专门解决此问题的相关文章。
这是我的终端命令:
当我尝试导入它时出现错误:
我的设置文件一定有问题,但我不确定它是什么。
更新
问题出在安装文件中。
本来应该:
python - __init__.py 在同一目录中找不到模块
我需要有关如何在 python 包中组织源代码的帮助——我已经在网上学习了几个教程(尤其是这个),但它并没有按照解释和我想象的那样工作。
我想创建一个名为binaryio
. 它应该提供两个名为的类BinaryReader
,BinaryWriter
我希望用户能够使用它们导入
因此,我创建了我的存储库和包目录结构,如下所示:
- binaryio(存储库根)
- binaryio(包根)
- __init__ .py(如下)
- binaryreader.py(包含
BinaryReader
类) - binarywriter.py(包含
BinaryWriter
类)
- setup.py(包含
setuptools.setup
调用) - .gitignore,README.md,许可证,...
- binaryio(包根)
正如您所看到的,这些类位于不同的文件中,因为我已经习惯了(来自 C# 背景)。我不确定这是否是一个好主意,因为模块是 Python 中的“单元” - 但是将所有类压缩到一个巨大的文件中对我来说似乎不合逻辑。
__init__.py看起来如下导入这些类,使(据我了解)from binaryio import BinaryReader
以后可以为用户导入:
但是,当我在本地安装软件包(似乎工作正常)并尝试时import binaryio
,我收到以下错误:
显然,我的__init__.py文件有问题。我不明白这一点,因为binaryreader.py文件又名模块存在于与您在上面看到的相同的文件夹中。有趣的是,我的 IDE(PyCharm,已将包根设置为源文件夹)不会抱怨其中的语句并且可以解析所有引用。
我在这里做错了什么?根据上面链接的教程,将一个文件放入xyz.py并使用一个名为的类Abc
然后写入from xyz import Abc
__init__.py应该可以工作,但显然它不适合我。