小编Wil*_*rdy的帖子

打包常见的python命名空间

我希望在接下来的几天内打包并上传一个我有PyPI的库,但是我对我的命名空间方法有点不确定.

我有一些其他不相关的项目采用类似的方法,并希望给它们所有相同的命名空间.例如:

  • 库1命名空间: abc.seo
  • 库2命名空间: abc.ajax
  • 库3命名空间: abc.ecommerce
  • 等等

问题是我不确定两个独立的包(例如鸡蛋)是否可能与同一个父命名空间共存.这种方法有问题,还是有办法绕过它?什么是最好的方法?

这些库不应该打包在一起,它们太不相关了.我希望在上传之前能够正确使用它,以避免在进行"官方"发布后出现令人痛苦的命名空间更改.

(NB abc不是真名,我希望我的问题免于广告)

UPDATE

我选择了以下内容,以便在没有安装setuptools的情况下对人们友善:

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)

具体如下setup.py:

setup(
    ...
    namespace_packages = ['rollyourown'],
    ...
Run Code Online (Sandbox Code Playgroud)

python packaging namespaces pypi

16
推荐指数
1
解决办法
3617
查看次数

在django模板中的itertools.groupby

我有一个奇怪的问题,itertools.groupby用于分组查询集的元素.我有一个模特Resource:

from django.db import models 

TYPE_CHOICES = ( 
    ('event', 'Event Room'),
    ('meet', 'Meeting Room'),
    # etc 
)   

class Resource(models.Model):
    name = models.CharField(max_length=30)
    type = models.CharField(max_length=5, choices=TYPE_CHOICES)
    # other stuff
Run Code Online (Sandbox Code Playgroud)

我的sqlite数据库中有几个资源:

>>> from myapp.models import Resource
>>> r = Resource.objects.all()
>>> len(r)
3
>>> r[0].type
u'event'
>>> r[1].type
u'meet'
>>> r[2].type
u'meet'
Run Code Online (Sandbox Code Playgroud)

因此,如果我按类型分组,我自然会得到两个元组:

>>> from itertools import groupby
>>> g = groupby(r, lambda resource: resource.type)
>>> for type, resources in g:
...   print type
...   for resource …
Run Code Online (Sandbox Code Playgroud)

python django group-by django-templates python-itertools

16
推荐指数
2
解决办法
3277
查看次数

matplotlib axes.set_aspect('equal')的行为与预期不符

我需要matplotlib中的一个数字,其中两个轴的长度始终相同.为此,我使用"相等"选项.在大多数情况下,它工作得很好,我得到了预期的结果(见图1),但是当y轴的值远高于x时,该图显示了一个意外的行为(见图2).有谁知道matplotlib的这种行为?

Danke,Jörg

        host = SubplotHost(fig, 111)
        try:
            min_x_val = min(x for x in self.x_values if x is not None)
            max_x_val = max(self.x_values)
        except ValueError:
            return

        max_y_val = list()
        for n, evaluator in enumerate(self.cleaned_evaluators):
            max_y_val.append(max(self.y_values[n]))

        # axis settings
        host.axis['left'].label.set_fontsize('small')
        host.axis['left'].major_ticklabels.set_fontsize('small')
        host.axis['bottom'].label.set_fontsize('small')
        host.axis['bottom'].major_ticklabels.set_fontsize('small')
        host.axis['bottom'].major_ticklabels.set_rotation(0)
        host.set_ylabel(y_label)
        host.set_xlabel(x_label)


        host.set_xlim(0, max_x_val)
        host.set_ylim(0, max_y_val)

        host.minorticks_on()
        host.toggle_axisline(False)
        host.axes.set_aspect('equal')
        host.grid(True, alpha=0.4)

        return fig
Run Code Online (Sandbox Code Playgroud)

图1:

当它工作

图2:

当它不起作用

python axes matplotlib

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