小编kur*_*tgn的帖子

如何在pycharm中全局管理sys.path

我有一堆单元测试,它们不是/python2.7/site-packages/从一个完全不同的目录导入东西.所以我所做的是在每个测试文件中进行一些猴子修补,sys.path.append以使我的Python看到我需要的东西.

有没有办法在sys.path不影响每个文件的情况下全局附加整个Pycharm项目?

更新:设置默认工作目录没有帮助.例如,如果我将工作目录设置为/Users/1111/_projects/_empty_dir/如此:

截图

然后运行它

import sys
for p in sys.path: print p
Run Code Online (Sandbox Code Playgroud)

我看到的就是这个

/Users/1111/.virtualenvs/blesk/bin/python /Users/1111/_projects/_testing_pycharm/importer.py
/Users/1111/_projects/_testing_pycharm
/Users/1111/.virtualenvs/blesk/lib/python2.7/site-packages/six-1.9.0-py2.7.egg
/Users/1111/.virtualenvs/blesk/lib/python2.7/site-packages/parse-1.6.6-py2.7.egg
/Users/1111/_projects/_testing_pycharm
/Users/1111/.virtualenvs/blesk/lib/python27.zip
/Users/1111/.virtualenvs/blesk/lib/python2.7
/Users/1111/.virtualenvs/blesk/lib/python2.7/plat-darwin
/Users/1111/.virtualenvs/blesk/lib/python2.7/plat-mac
/Users/1111/.virtualenvs/blesk/lib/python2.7/plat-mac/lib-scriptpackages
/Users/1111/.virtualenvs/blesk/lib/python2.7/lib-tk
/Users/1111/.virtualenvs/blesk/lib/python2.7/lib-old
/Users/1111/.virtualenvs/blesk/lib/python2.7/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/1111/.virtualenvs/blesk/lib/python2.7/site-packages

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

并没有/Users/1111/_projects/_empty_dir/sys.path.

python pycharm

8
推荐指数
3
解决办法
8918
查看次数

url_for用于Flask-Admin中基于类的视图

我有一个基于类的管理员视图:

class All_RDPs(BaseView):
    @expose('/')
    def index(self):
        return 'ok1'
    @expose('/test')
    def testindex(self):
        return 'ok2'
Run Code Online (Sandbox Code Playgroud)

这是在Flask-Admin中注册的,如下所示:

admin.add_view(All_RDPs(name='dep_rdp'))
Run Code Online (Sandbox Code Playgroud)

然后可以从浏览器中查看,如下所示:

http://localhost/admin/all_rdps/
http://localhost/admin/all_rdps/test
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 如何指定此类的URL而不是默认生成的名称all_rdps
  2. 如何使用url_for这些端点生成网址?url_for('admin.All_RDPs.testindex'),url_for('admin.All_RDPs')不要工作.

python flask flask-admin

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

peewee和peewee-async:为什么异步更慢

我试图绕过Tornado和异步连接到Postgresql.我找到了一个可以在http://peewee-async.readthedocs.io/en/latest/上执行此操作的库.

我设计了一个小测试来比较传统的Peewee和Peewee-async,但不知何故异步工作得更慢.

这是我的应用:

import peewee
import tornado.web
import logging
import asyncio
import peewee_async
import tornado.gen
import tornado.httpclient
from tornado.platform.asyncio import AsyncIOMainLoop

AsyncIOMainLoop().install()
app = tornado.web.Application(debug=True)
app.listen(port=8888)

# ===========
# Defining Async model
async_db = peewee_async.PooledPostgresqlDatabase(
    'reminderbot',
    user='reminderbot',
    password='reminderbot',
    host='localhost'
)
app.objects = peewee_async.Manager(async_db)
class AsyncHuman(peewee.Model):
    first_name = peewee.CharField()
    messenger_id = peewee.CharField()
    class Meta:
        database = async_db
        db_table = 'chats_human'


# ==========
# Defining Sync model
sync_db = peewee.PostgresqlDatabase(
    'reminderbot',
    user='reminderbot',
    password='reminderbot',
    host='localhost'
)
class SyncHuman(peewee.Model):
    first_name = peewee.CharField() …
Run Code Online (Sandbox Code Playgroud)

python postgresql tornado peewee python-asyncio

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

django rest框架 - 如何为序列化程序添加静态字段值

我需要在序列化程序中添加一个静态字段.无论传递的对象如何,它应始终返回相同的值.目前我实现它是这样的:

class QuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    @staticmethod
    def get_type(obj):
        return 'question'

    class Meta:
        model = Question
        fields = ('type',)
Run Code Online (Sandbox Code Playgroud)

但有没有更简单的方法来做到这一点SerializerMethodField

python django django-rest-framework

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

pycharm 和子进程 - 在控制台中有效的方法在 Pycharm 中无效

Pycharm 的解释器似乎已经停止理解我的一些控制台命令。它不断识别默认的 shell 命令,但不识别已安装的实用程序。

例如,subprocess模块理解touch命令但不理解heroku命令。

有趣的是,当我在控制台中输入相同的字符串时,使用相同的解释器(来自相同的 virtualenv),一切正常。

视觉示例:

在此处输入图片说明

几天前它停止工作,在此之前一切正常。

我以为我搞砸了我的一些环境变量,但打开了一个我一个月没碰过的旧项目,发现同样的subprocess命令在那里也停止工作了。

可能是什么问题呢?

更新

好的,我让这件事起作用了。

os.environ['PATH']控制台和 Pycharm 中的值不同。在我将正确的 PATH 添加到 Pycharm 配置环境变量后,一切又开始工作了。

现在的问题是,如何避免在我的每个项目中检查每个配置并在任何地方添加这个新 PATH?有没有办法在全局范围内执行此操作并修复这个唯一已损坏的设置?

python subprocess pycharm

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

webpack代码拆分 - 创建一个额外的bunlde:0.bundle.js

我有以下webpack配置:

const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
    entry: {
        source1: './frontend/source1.js',
        source2: './frontend/source2.js'
    },
    output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'static/bundles')
    },
    plugins: [
        new CleanWebpackPlugin(['static/bundles'])
    ],
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader', //  ??? .vue-??????
                options: {
                    loaders: {
                    }
                    // other vue-loader options go here
                }
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            }
        ]
    },
    resolve: {
        alias: {
            vue$: 'vue/dist/vue.esm.js'
        }
    }
}; …
Run Code Online (Sandbox Code Playgroud)

webpack code-splitting

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

pytest django:无法访问固定装置拆卸中的数据库

我需要在使用夹具后显式删除它。我知道 pytest-django 默认情况下会在拆卸时删除所有对象,但在这种特殊情况下,我需要手动执行此操作。然而,虽然我的测试被标记为pytest.mark.django_db,但我能够创建一个固定装置,但无法在一行后删除它yield

import pytest

from tgapps.models import TelegramApp


@pytest.fixture(scope='module')
def some_fixture():

    app = TelegramApp.objects.create(
        session_data=b'\xa2\x8f#',
        app_owner_phone=79856235474,
        app_id=182475,
        app_hash='aad9ab4384fea1af0342b77b606d13b0'
    )
    yield app

    print('deleting object...')
    app.delete()


class TestTelegramServiceObject(object):

    @pytest.mark.django_db
    def test1(self, some_fixture):
        print('Fixture created:')
        print(some_fixture)
Run Code Online (Sandbox Code Playgroud)

这是我的测试输出:

============================= test session starts ==============================
platform darwin -- Python 3.6.4, pytest-3.4.0, py-1.5.2, pluggy-0.6.0
Django settings: inviter.settings.staging (from ini file)
rootdir: /Users/1111/_projects/fasttrack/inviter, inifile: pytest.ini
plugins: mock-1.7.1, dotenv-0.1.0, django-3.1.2
collected 1 item
test_example.py E.Fixture created:
<79856235474 - 182475>
deleting object...

tests/api/test_example.py:25 (TestTelegramServiceObject.test1)
@pytest.fixture(scope='module') …
Run Code Online (Sandbox Code Playgroud)

django pytest pytest-django

5
推荐指数
2
解决办法
3203
查看次数

mypy:如何忽略 mixin 中的“缺少属性”错误

我无法让 mypy 与 mixin 一起正常工作:它一直抱怨我的 mixins 引用了缺少的属性。考虑这个例子:

class PrintValueMixin:
    """A mixin that displays values"""

    def print_value(self) -> None:
        print(self.value)


class Obj(PrintValueMixin):
    """An object that stores values. It needs a mixin to display its values"""

    def __init__(self, value):
        self.value = value


instance = Obj(1)
instance.print_value()
Run Code Online (Sandbox Code Playgroud)

如果我在这个文件上运行 mypy,我会收到一个错误:

error: "PrintValueMixin" has no attribute "value"
Run Code Online (Sandbox Code Playgroud)

当然它没有属性“值”。它是一个mixin,它不应该有自己的属性!

那么我如何让 mypy 理解这一点呢?

mypy

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

混入中的 super().__init__(....) 失败,因为“对象”的“__init__”参数太多`

当我创建一个扩展逻辑的 mixin 类时__init__,通常要做的是:

class ExtraValuemixin:

    def __init__(self, *args, **kwargs)  -> None:
        super().__init__(*args, **kwargs)
        # some extra initialization
        self._extra_value = 1

    def retrieve_extra_value(self):
        return self._extra_value
Run Code Online (Sandbox Code Playgroud)

然而,这对 mypy 来说似乎是错误的,正如它所说:

Too many arguments for "__init__" of "object"
Run Code Online (Sandbox Code Playgroud)

我明白了,在的构造函数签名中没有*argsor ;但这是一个 mixin,它依赖于它的孩子的构造函数。我如何让 mypy 理解这一点?**kwargsobject

完整示例:

class ExtraValuemixin:

    def __init__(self, *args, **kwargs)  -> None:
        super().__init__(*args, **kwargs)
        # some extra initialization
        self._extra_value = 1

    def retrieve_extra_value(self):
        return self._extra_value


class ParentObj:

    def __init__(self, value):
        self.value = value


class ChildObj(ExtraValuemixin, ParentObj):
    pass


obj …
Run Code Online (Sandbox Code Playgroud)

python mypy

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

mypy和django模型:如何检测不存在的属性上的错误

考虑以下模型定义和用法:

from django.db import models


class User(models.Model):

    name: str = models.CharField(max_length=100)


def do_stuff(user: User) -> None:

    # accessing existing field
    print(user.name.strip())

    # accessing existing field with a wrong operation: will fail at runtime
    print(user.name + 1)

    # acessing nonexistent field: will fail at runtime
    print(user.name_abc.strip())
Run Code Online (Sandbox Code Playgroud)

mypy在此基础上运行时,我们将收到以下错误消息user.name + 1

error: Unsupported operand types for + ("str" and "int")
Run Code Online (Sandbox Code Playgroud)

这可以。但是代码中还有另一个错误- user.name_abc不存在,将在运行时导致AttributeError。

但是,mypy不会看到此信息,因为它允许代码访问任何django属性,并将它们也视为Any

u = User(name='abc')
reveal_type(user.abcdef)
....

> error: Revealed type is 'Any
Run Code Online (Sandbox Code Playgroud)

那么,如何使mypy看到此类错误?

django mypy

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