使用distutils
,setuptools
等,在setup.py
以下位置指定软件包版本:
# file: setup.py
...
setup(
name='foobar',
version='1.0.0',
# other attributes
)
我希望能够从包中访问相同的版本号:
>>> import foobar
>>> foobar.__version__
'1.0.0'
我可以将其添加__version__ = '1.0.0'
到包的__init__.py中,但是我还想在包中包括其他导入,以创建包的简化接口:
# file: __init__.py
from foobar import foo
from foobar.bar import Bar
__version__ = '1.0.0'
和
# file: setup.py
from foobar import __version__
...
setup(
name='foobar',
version=__version__,
# other attributes
)
但是,foobar
如果这些其他导入导入尚未安装的其他软件包,则可能导致安装失败。与setup.py和软件包共享软件包版本的正确方法是什么?
setup.py
仅设置版本,然后使用读取自己的版本pkg_resources
,从而有效地查询setuptools
元数据:
文件: setup.py
setup(
name='foobar',
version='1.0.0',
# other attributes
)
文件: __init__.py
from pkg_resources import get_distribution
__version__ = get_distribution('foobar').version
为了在所有情况下都能正常工作,您可能最终无需安装就运行它,请测试DistributionNotFound
并确定分发位置:
from pkg_resources import get_distribution, DistributionNotFound
import os.path
try:
_dist = get_distribution('foobar')
# Normalize case for Windows systems
dist_loc = os.path.normcase(_dist.location)
here = os.path.normcase(__file__)
if not here.startswith(os.path.join(dist_loc, 'foobar')):
# not installed, but there is another version that *is*
raise DistributionNotFound
except DistributionNotFound:
__version__ = 'Please install this project with setup.py'
else:
__version__ = _dist.version
软件包的版本号是个奇怪的东西。它们看起来像十进制的数字,但它们不是。 例如,一个版本号通常的形式为 2.6.4。如果你需要比较两个版本号, 不能做简单的字符串比较,因为 2.6.4 会比 2.6.12 大;也不能进行数字比较, 因为它们不是有效地数字。 Puppet 的 versioncmp 函数会帮我们解决这个问题。 若你给它传递两个版本号,它会比较它们,并返回一个值,指出谁是更大的: ve
问题内容: 如何从软件包中定义版本(出于或其他目的)? 问题答案: 询问已安装发行版的版本字符串 要在运行时从程序包内部检索版本(您的问题似乎在问什么),可以使用: 存储版本字符串以在安装期间使用 如果您想沿另一方向走动(这似乎是其他答案作者似乎认为您正在询问的问题),请将版本字符串放在单独的文件中,然后在中读取该文件的内容。 您可以用一行在软件包中创建一个version.py ,然后使用来从se
问题内容: 在我的GOPATH中,我有类似以下内容: 在我,在和我有。 当我尝试出现以下错误时: 这是否意味着任何属于的文件都应该放在其自己的文件夹中?如果是这样,原因是什么? 问题答案: 是的,每个程序包必须在其自己的目录中定义。 源结构在如何编写Go代码中定义。 包是可以在多个程序中使用,可以发布,导入,从URL获取等的组件。因此,使其具有自己的目录和程序可以具有的目录一样多是有意义的。
本文向大家介绍Perl中的软件包是什么?,包括了Perl中的软件包是什么?的使用技巧和注意事项,需要的朋友参考一下 Perl中的package语句将当前命名上下文切换到指定的命名空间(符号表)。因此- 包是驻留在其自己的命名空间中的代码的集合。 命名空间是唯一变量名称的命名集合(也称为符号表)。 命名空间可防止程序包之间的变量名冲突。 包使模块的构造成为可能,这些模块在使用时不会破坏模块自身命名空
问题内容: 我正在使用Eclipse,并且有一段时间没有使用Java了。但是,我可以在命令行上编译我的代码,并生成必要的文件。在Eclipse中,它抱怨。这是什么意思,我该如何解决? 样例代码: 我的项目的名称是。 问题答案: Eclipse希望声明的包与目录层次结构匹配-因此,它希望Java文件位于源根目录下的“ Devices”目录中。目前,该文件似乎直接位于您的源根目录中。因此,创建适当的目
Tazpkg - 软件包管理器 Slitaz提供一个小型软件包管理器,它能轻易在系统里安装许多软件。Tazpkg是一个由SHell脚本写的轻量级的软件包管理器,能安 装.tazpkg文件。它能在Busybox、ash shell和bash中正常运行。Tazpkg可以让你列出软件包列表、安装软件包、删除软件包、下载软件包、解压软件包、打包软件包、查找软件包或者取 得有关可用软件包或所有已安装软件包的