Ошибка импорта модуля ... Я думаю, это потому, что вы на самом деле не запускали venv до запуска gunicon, поскольку вы делаете это прямо из служебного файла. Вы можете написать bash-файл с некоторыми командами, чтобы включить venv перед запуском gunicorn, чтобы он работал внутри него. Посмотрите на эту статью:
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
С уважением.
Это - то, что должен сказать диспетчер программ C#: , Почему не делает C#, имеют 'с' оператором?
Небольшие или несуществующие преимущества удобочитаемости. Мы думали, что преимущества удобочитаемости были небольшими или не существовали. Я не пойду насколько сказать, что с оператором делает код менее читаемым, но некоторые люди, вероятно, было бы.
Увеличенная сложность языка. Добавление с оператором сделало бы язык более сложным. Например, VB должен был добавить новый синтаксис языка для обращения к потенциальной неоднозначности между локальной переменной (текст) и свойством на "с" целью (.Text). Другие способы решить эту проблему также представляют сложность языка. Другой подход должен продвинуть объем и заставить свойство скрыть локальную переменную, но тогда нет никакого способа относиться к локальному, не добавляя некоторый синтаксис Escape.
наследие C++. C++ никогда не имел с оператором, и отсутствие такого оператора, как обычно думают, не является проблемой разработчиками C++. Кроме того, мы не чувствовали, что другие изменения - изменяются в виде людей кода, пишут, изменения в платформе, другие изменения на языке, и т.д. - сделанный с более необходимыми операторами.
В C# 3.0 можно использовать объектные инициализаторы для достижения подобного эффекта при создании объектов.
var control = new MyControl
{
Title = "title",
SomeEvent += handler,
SomeProperty = foo,
Another = bar
};
, А не:
var control = new MyControl();
control.Title = "title";
control.SomeEvent += handler;
control.SomeProperty = foo;
control.Another = bar;
Примечание, что, хотя этот синтаксис был представлен в C# 3.0, можно все еще использовать его с 2,0 платформами, это - просто синтаксический сахар, представленный компилятором.
Это не идиоматический c#, но если Вы действительно хотите with
эквивалентный, Вы могли бы сделать это:
Person MyPersonWithALongName = new Person();
MyUtils.With(MyPersonWithALongName, p => {
p.Name = "George";
p.Address = "123 Main St";
...
});
class MyUtils {
public static void With<T>(T x, Action<T> do) {
do(x);
}
}
Обновление:
мне пришло в голову, что Вы могли тривиально сделать это более кратким путем превращения его в дополнительный метод, возможно, переименования его "Псевдоним" или "Как" для reabability:
MyPersonWithALongName.Alias(p => {
p.Name = "George";
p.Address = "123 Main St";
...
});
Нет, "с" ключевым словом был намеренно упущен из языка.
, Если у Вас есть длинное название ссылки, можно легко сделать более короткую ссылку на нее с помощью переменной и даже дать ей ограниченный объем:
{
SomeClass r = Some.Lengthy.Path.To.Get.To.A.Referece;
r.Some = 42;
r.Properites = "none";
r.To = 1;
r.Set = null;
}
Нет, это было сознательное решение, принятое командой разработчиков C#. Люди смешали чувства о 'с' ключевым словом, потому что оно может ухудшить удобочитаемость кода, если злоупотреблено (вложенный with's).
Я не предполагаю, что существует техническая причина, она не существует. Что я сказал бы, хотя, то, что причина, что это не существует, состоит в том, что это - конструкция программирования, которая существует только в целях сокращения ввода. С вещами как intellisense, и копией и вставкой, мир действительно не имеет большого спроса на функции как это больше. Я использую VB.Net и не могу вспомнить, поддерживается ли он даже все еще. Никогда действительно чувствовавший потребность использовать его.