小编Joh*_*han的帖子

Conda是否取代了virtualenv的需求?

我最近发现康达我是有安装SciPy的麻烦后,确切的说是我开发一个应用程序的Heroku.

使用Conda,您可以创建与virtualenv非常相似的环境.我的问题是:

  1. 如果我使用Conda它会取代virtualenv的需要吗?如果没有,我该如何将两者结合使用?我是在Conda中安装virtualenv,还是在virtualenv中安装Conda?
  2. 我还需要使用pip吗?如果是这样,我还能在隔离环境中安装带有pip的软件包吗?

python virtualenv scipy anaconda conda

184
推荐指数
8
解决办法
6万
查看次数

在Conda中创建一个后激活脚本

我正在创建一个Django Web应用程序,并使用Conda来管理所需的包和虚拟环境.我想在激活环境后立即设置环境变量(Django设置位置).它还应该将当前目录更改为我的项目目录.

我之前使用过virtualenvwrapper,我刚刚将命令添加到postactivate脚本中.

如何使用Conda实现这一目标?

python django conda

12
推荐指数
1
解决办法
3784
查看次数

将Pandas DataFrame保存到Django模型

我有一个存储在pandas DataFrame中的股票价格数据,如下所示(实际上它在面板中,但我将其转换为DataFrame)

        date  ticker  close       tsr
0 2013-03-28  abc     22.81  1.000439
1 2013-03-28  def     94.21  1.006947
2 2013-03-28  ghi     95.84  1.014180
3 2013-03-28  jkl     31.80  1.000000
4 2013-03-28  mno     32.10  1.003125
...many more rows
Run Code Online (Sandbox Code Playgroud)

我想将它保存在Django模型中,它看起来像这样(匹配列名):

class HistoricalPrices(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    tsr = models.DecimalField()
    close = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)

我到目前为止最好的用它来保存它,其中df是我的DataFrame:

entries = []
for e in df.T.to_dict().values():
    entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来保存这个?

我看过django-pandas,但看起来它只是从数据库读取.

python django pandas

9
推荐指数
1
解决办法
7868
查看次数

如何记录Django项目?

我该如何记录Django项目?我不是在谈论我正在创建的应用程序,我将推送到github.它基本上是内部文档,可以帮助我们采用的新开发人员加快系统速度.(我想这一般是文档的重点)

我应该记录下面的每个视图功能,模型或表单:

def home(request):
    """View that renders the home page."""

class MyModel(models.Model):
    "Documentation regarding my model."""
Run Code Online (Sandbox Code Playgroud)

这似乎有点矫枉过正.是否有一些好的项目我可以从中寻找灵感?

python django

9
推荐指数
1
解决办法
1530
查看次数

使用直通模型了解Django中的ManyToMany字段

我无法理解ManyToMany模型字段与直通模型的使用.没有ManyToMany字段,我可以很容易地实现相同的功能.考虑以下Django的文档:

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


class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')


class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

我不明白的是,如何使用ManyToMany字段比简单地删除它并使用相关管理器更好.例如,这两个模型将更改为以下内容:

class Group(models.Model):
    name = models.CharField(max_length=128)


class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='members')
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

django django-models

8
推荐指数
2
解决办法
4438
查看次数

Django百分比字段

我正在尝试在 Django 中创建一个百分比字段,用户只需填写 40 表示 40%。输入框的右侧会有一个百分比符号,以便他们知道他们应该填写一个百分比。0.4 必须存储在 DB 中。到目前为止,我已经尝试了以下方法:

class PercentageField(fields.FloatField):
    widget = fields.TextInput(attrs={"class": "percentInput"})

    def to_python(self, value):
        val = super(PercentageField, self).to_python(value)
        if is_number(val):
            return val/100
        return val

    def prepare_value(self, value):
        val = super(PercentageField, self).prepare_value(value)
        if is_number(val):
            return str((float(val)*100))
        return val

def is_number(s):
    if s is None:
        return False
    try:
        float(s)
        return True
    except ValueError:
        return False
Run Code Online (Sandbox Code Playgroud)

它可以工作,但问题是,当我发布无效数据并再次呈现表单时,它会将 40 显示为 4000。换句话说,它再次将数字乘以 100,而不将其除以。

任何建议我如何解决它?

我试过这个解决方案,但它重复值 100 次。在我更正之后它也有同样的问题。

我正在使用 Python3.5

python django

7
推荐指数
2
解决办法
1万
查看次数

如何通过Internet在两台计算机之间发送数据

我一整天都在努力解决这个问题,我希望有人可以帮助我.

我的问题很简单:我希望通过互联网将数据(主要是简单的命令)从一台PC传输到另一台PC.

当两台计算机连接到我的家用路由器时,我已经能够使用Java中的套接字来实现这一点.然后,我使用两个不同的移动电话将两台计算机连接到互联网,并尝试再次传输数据.我使用移动电话,因为这提供了到互联网的直接路由,如果我使用我的路由器,我必须设置端口转发,至少,这是我理解它.

我认为问题在于我设置客户端套接字的方法.我用了:

Socket kkSocket = new Socket(ipAddress, 3333);
Run Code Online (Sandbox Code Playgroud)

其中ipAddress是运行服务器的计算机的IP地址.我通过右键单击连接,状态,支持来获取IP地址.这是正确使用的IP地址还是在哪里可以获取服务器的地址?此外,是否可以为我的计算机获取一个固定的名称,而不是输入IP地址,因为每次使用我的手机连接到互联网时这都会改变?

或者,是否有更好的方法来解决我的问题,如使用http,如果是这样,我在哪里可以找到有关此问题的更多信息?

编辑: 是否有可能让服务器程序在互联网上的某个服务器上运行.我的原始服务器将是一个向该服务器发送信息的客户端.然后,此服务器将此信息传递给我的原始客户端,反之亦然.这样,我的计算机的IP地址无关紧要,因为我只需要知道在网络上某处托管的服务器的地址.这似乎是一个更好的解决方案吗?我从哪里开始实施这样的解决方案?

谢谢!

java sockets

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

Celery:众多小任务还是一项长期运行的任务?

我有一个 Django 应用程序并使用 Celery 来处理长时间运行的任务。

假设我需要生成一个文件(需要 5 秒),将其附加到电子邮件中并将其发送给 1000 个用户,以下哪种方法是首选方法?

方法 1:For 循环外部任务 - 生成计算后台任务,每个任务运行几秒钟

@share_task
def my_task(usr):
    #gen file + send email...

def send_to_all_users(users):  # called to start task
    for usr in users:
        my_task.delay(usr)
Run Code Online (Sandbox Code Playgroud)

方法 2:任务内的 For 循环 - 生成 1 个可能运行数小时的后台任务

@share_task
def my_task(users):
    for usr in users:
        #gen file + send email...

def send_to_all_users(users):  # called to start task
    my_task.delay(users)
Run Code Online (Sandbox Code Playgroud)

使用方法 1,我可以扩大工作人员的数量以更快地完成整个任务,但创建所有这些任务可能需要一段时间,而且我不确定我的任务队列是否可以填满,然后作业会被丢弃?

方法2看起来更简单,但它可能会运行很长时间,而且我无法扩大工人的数量。

不确定这是否重要,但我的应用程序正在 Heroku 上运行,并且我使用 Redis 作为消息代理。我目前正在使用一个后台工作者。

django celery

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

在Pandas的Vlookup与近似的比赛

我需要在两个pandas数据帧上进行vlookup样式操作

Excel中的Vlookup函数有一个额外的参数,无论它是否应该找到近似或完全匹配.对于完全匹配,我知道我可以使用join函数.但是,如果我找到下一个更大的值,我将如何进行近似匹配?

例如,如果我有一个标记和成绩定义数据框,如下所示:

Student Mark
John    65
Peter   75
Jason   79
Run Code Online (Sandbox Code Playgroud)

Mark    Symbol
50      D
60      C  # table indicates a mark between 60 and 69 is a C symbol
70      B
80      A
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这样的表格:

Student Mark    Symbol
John    65      C
Peter   75      B
Jason   79      B
Run Code Online (Sandbox Code Playgroud)

pandas

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

使用分组在Django中进行条件批量更新

假设我有一个具有以下模型定义的事务列表:

class Transaction(models.Model):
    amount = models.FloatField()
    client = models.ForeignKey(Client)
    date = models.DateField()
    description = models.CharField()
    invoice = models.ForeignKey(Invoice, null=True)
Run Code Online (Sandbox Code Playgroud)

现在我想在月底为每个客户创建发票.发票模型如下所示:

class Invoice(models.Model):
    client = models.ForeignKey(Client)
    invoice_date = models.DateField()
    invoice_number = models.CharField(unique=True)

    def amount_due(self):
        return self.transaction_set.aggregate(Sum('amount'))

def create_invoices(invoice_date):
    for client in Client.objects.all():
    transactions = Transaction.objects.filter(client=client)
    if transactions.exists():
        invoice = Invoice(client=client, number=get_invoice_number(), date=invoice_date)
            invoice.save()
            transactions.update(invoice=invoice)
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过批量创建在1个查询中创建批量创建的所有发票,但我仍然需要单独在交易模型中设置发票字段.

在创建所有发票后,是否可以使用单个查询设置所有交易模型的发票字段?最好在使用ORM时,但如果需要,很乐意使用原始SQL.

我知道我也可以在交易清单上使用逐个客户来获取每个客户的总数,但随后各个条目都没有链接到发票.

sql django postgresql django-models django-orm

6
推荐指数
2
解决办法
240
查看次数