小编los*_*ode的帖子

Ubuntu + virtualenv =乱七八糟?virtualenv讨厌dist-packages,想要网站包

有人可以向我解释一下ubuntu 9.04中python的用途吗?

我正试图旋转virtualenv,--no-site-packages旗帜似乎与ubuntu无关.我安装virtualenv 1.3.3easy_install(我已经升级到setuptools 0.6c9),似乎安装了一切/usr/local/lib/python2.6/dist-packages

假设在使用apt-get安装软件包时,它被放入/usr/lib/python2.6/dist-packages/

问题是,还有一个/usr/local/lib/python2.6/site-packages只是坐在那里是空的.看起来(通过查看patha virtualenv),这是virtualenv用作备份的文件夹.因此,即使我想省略--no-site-packages,我也无法从我的任何virtualenv访问我的本地系统包.

所以我的问题是:

  1. 我如何virtualenv指向其中一个dist-packages
  2. 我应该指出哪些包装?/usr/lib/python2.6/dist-packages要么/usr/local/lib/python2.6/dist-packages/
  3. 有什么意义/usr/lib/python2.6/site-packages?那里什么都没有!
  4. 它是先到先得的路径吗?如果我有一个更新版本的XYZ安装包/usr/local/lib/python2.6/dist-packages/和更老版本(来自ubuntu repos/apt-get)/usr/lib/python2.6/dist-packages,哪一个导入我import xyz?我假设这是基于路径列表,是吗?
  5. 为什么这么混乱?这里有什么我想念的吗?
  6. easy_install应该安装到哪里定义/usr/local/lib/python2.6/dist-packages
  7. 这会影响pip吗?

感谢任何能够清除这一点的人!

python ubuntu setuptools virtualenv

14
推荐指数
2
解决办法
8794
查看次数

模型unique_together约束+无=失败?

2个问题:

  • 当parent = None且name相同时,如何阻止创建重复项?
  • 我可以从表单中调用模型方法吗?

请参阅以下详细信息:

models.py

class MyTest(models.Model):
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=255, blank=True, unique=True)
    owner = models.ForeignKey(User, null=True)

    class Meta:
        unique_together = ("parent", "name")

    def save(self, *args, **kwargs):
        self.slug = self.make_slug() 
        super(MyTest, self).save(*args, **kwargs)

    def make_slug(self):
        # some stuff here 
        return generated_slug
Run Code Online (Sandbox Code Playgroud)

注意:slug =也是唯一的!

forms.py

class MyTestForm(forms.ModelForm):
    class Meta:
        model = MyTest
        exclude = ('slug',)

    def clean_name(self):
        name = self.cleaned_data.get("name")
        parent = self.cleaned_data.get("parent")

        if parent is None:
            # this doesn't work …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

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

Django模型继承w/custom inclusion_tags

我会尽可能地尝试简化这个.可以说我有以下内容:

models.py

class Person(models.Model):
    name = models.CharField(max_length=255)

    def getRealPerson(self):
        # is there a better way to do this?
        ret = None
        try:
            ret = self.worker
        except:
            try:
                ret = self.retired
            except:
                ret = self
        return ret
class Worker(Person):
    salary = models.IntegerField(default=0)

class Retired(Person):
    age = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

这个例子对我想要的东西并不重要,请跟我一起去.这样做的目的是让我可以有一个主人员表来引用所有人.

理想情况下,我希望能够调用Person的视图,并以每种类类型的自定义方式列出每个特定的详细信息.我想使用自定义的inclusion_tag来执行此操作.

people.html

{% load people_extras %}
{% for person in people %}
   {% show_person person %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

people_extras.py - templatetags

from django import template

@register.inclusion_tag('worker.html')
def show_worker(person):
    return {'person':person}

@register.inclusion_tag('worker.html')
def …
Run Code Online (Sandbox Code Playgroud)

django inheritance django-templates django-models

5
推荐指数
1
解决办法
701
查看次数

python 2.6.x theading/signals/atexit在某些版本上失败了吗?

我已经看到了很多与此相关的问题...但我的代码适用于python 2.6.2并且无法在python 2.6.5上运行.我错误地认为整个atexit"通过这个模块注册的功能在程序被信号杀死时不被调用"这件事不应该在这里计算,因为我正在捕捉信号然后干净地退出?这里发生了什么?什么是正确的方法来做到这一点?

import atexit, sys, signal, time, threading

terminate = False
threads = []

def test_loop():
    while True:
        if terminate:
            print('stopping thread')
            break
        else:
            print('looping')
            time.sleep(1)

@atexit.register
def shutdown():
    global terminate
    print('shutdown detected')
    terminate = True
    for thread in threads:
        thread.join()

def close_handler(signum, frame):
    print('caught signal')
    sys.exit(0)

def run():
    global threads
    thread = threading.Thread(target=test_loop)
    thread.start()
    threads.append(thread)

    while True:
        time.sleep(2)
        print('main')

signal.signal(signal.SIGINT, close_handler)

if __name__ == "__main__":
    run()
Run Code Online (Sandbox Code Playgroud)

python 2.6.2:

$ python halp.py 
looping
looping
looping …
Run Code Online (Sandbox Code Playgroud)

python multithreading signals atexit

5
推荐指数
1
解决办法
2566
查看次数