小编Goo*_*oid的帖子

.egg dirs在site-packages中安装python包时?

所以我决定直接从下载的tar文件中安装python包(技术上是Django应用程序),提取它并使用以下命令:

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

但是,在我的site-packages目录中,我发现该软件包安装在同样具有版本号的.egg目录中.他们的目录看起来像这样烦人:

site-packages/django_cms-2.1.3-py2.7.egg/cms
site-packages/django_cms-2.1.3-py2.7.egg/mptt
Run Code Online (Sandbox Code Playgroud)

我需要将软件包作为目录安装,软件包名称没有.egg或版本号,否则Django找不到软件包.它应该是这样的:

site-packages/cms
site-packages/mptt
Run Code Online (Sandbox Code Playgroud)

试图从pip安装相同的包,它工作正常.这是令人沮丧的,所以一些帮助将不胜感激.

我找到了一个讨论相似内容的线程,但它没有提供一个有效的解决方案.

编辑:让我进一步解释一下,python(django)项目无法找到我安装的软件包,因为软件包没有安装在site-packages目录的根目录下.相反,它驻留在.egg目录中.我必须做的是manuall将包移动到root,但是你如何正确安装python包?

另一个编辑:我没有压制easy-install.pth文件,但它没有被PyDev拾取.

python django install package

6
推荐指数
0
解决办法
713
查看次数

Django:自动将模型字段中的空字符串设置为None?

我想在Django模型中迭代我的模型字段并检查它们是否为空字符串,并以编程方式在模型save()方法中用null替换它们.这是因为一些CharField需要是唯一的或没有价值.

例:

class Person(models.Model):
    name = models.CharField(blank=True, unique=True, null=True)
    nick_name = models.CharField(blank=True, unique=True, null=True)
    ...
    age = models.IntegerField()

    def save(self, *args, **kwargs):
        for field in self._meta.fields: # get the model fields
            if field=='':
                field = None
       super(Person, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

上面抱怨了一个creation_counter,不清楚为什么要尝试将这些值而不是字段值与空字符串进行比较.

这可以手动完成,但我有太多型号....

有什么建议?

编辑:感谢所有试图帮助我的人!:d

似乎对我有用的解决方案由Jazz发布,但他的代码没有出现在他的帖子中.这是我的版本基本相同,但需要额外检查以确保我们只在必要时覆盖:

from django.db.models.Field import CharField as _CharField

class CharField(_CharField):
    def get_db_prep_value(self, value, *args, **kwargs):
        if self.blank == self.null == self.unique == True and value == '':
            value = None

        return super(CharField).get_db_prep_value(value, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

django django-models

3
推荐指数
1
解决办法
3623
查看次数

标签 统计

django ×2

django-models ×1

install ×1

package ×1

python ×1