Я знаю, что это более старый вопрос, но вот шаги, которые я использовал, чтобы cassandra-driver
установить на Windows 7 / Python2. У меня есть окна 10 / Python3 дома, где я буду тестировать это сегодня вечером. Я подтвердил, что это также работает в Windows 10 с Python 2 и 3.
Проблема
Command "python setup.py egg_info" failed with error code 1 in c:\users\Frito\appdata\local\temp\pip-build-7dgmdc\cassandra-driver
TL; DR Решение
Решение (Мне хотелось бы, чтобы кто-то объяснил, почему это сработало)
pip install cassandra-driver
и полученное выше сообщение об ошибке pip install --pre cassandra-driver
и получила следующую ошибку blockquote>distutils.errors.DistutilsError: Setup script exited with error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27 Command "c:\users\Frito\.virtualenvs\symdash\scripts\python.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\Frito\\appdata\\local\\temp\\pip-build-sesxxu\\cassandra-driver\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\Frito\appdata\local\temp\pip-ujsxsk-record\install-record.txt --single-version-externally-managed --compile --install-headers c:\users\Frito\.virtualenvs\symdash\include\site\python2.7\cassandra-driver" failed with error code 1 in c:\users\Frito\appdata\local\temp\pip-build-sesxxu\cassandra-driver
- Установлен
Microsoft Visual C++ Compiler for Python 2.7
- Успешно выполнен
pip install --pre cassandra-driver
- Успешно выполнен
pip uninstall cassandra-driver
- Успешно выполнен
pip install cassandra-driver
Чтобы повторить, я не совсем уверен, почему это сработало. В настоящее время мои два основных вывода заключаются в том, что либо компилятор C ++ требуется , либо , который запускает параметр
--pre
, в первый раз установил некоторые зависимости, отсутствующие в «обычной» установке. Я буду обновлять сегодня после работы, когда у меня появятся дополнительные подробности.
Наличие в Java переменной final
означает, что после присвоения переменной вы не можете переназначить эту переменную для указания на другой объект. Это на самом деле не означает, что объект не может быть изменен. Например, следующий код Java работает отлично:
public final List<String> messages = new LinkedList<String>();
public void addMessage()
{
messages.add("Hello World!"); // this mutates the messages list
}
, но следующее даже не скомпилируется:
public final List<String> messages = new LinkedList<String>();
public void changeMessages()
{
messages = new ArrayList<String>(); // can't change a final variable
}
Итак, ваш вопрос о том, существует ли final
в Python. Это не так.
Однако, Python имеет неизменные структуры данных. Например, хотя вы можете изменить список
, вы не можете изменить кортеж
. Вы можете изменить набор
, но не frozenset
и т. Д.
Мой совет - просто не беспокоиться о применении немутации на уровне языка и просто сосредоточиться на что ты не
По состоянию на 2019 и PEP 591, Python имеет Final
тип. Это не будет доступно в стандартной библиотеке до релиза Python 3.8, но до тех пор можно использовать его через эти расширения ввода библиотека. Это не будет работать final
работы в Java, хотя, поскольку Python является все еще динамически типизированным языком. Но если Вы будете использовать его вместе со статическим средством проверки типа как mypy, то это принесет Вам очень похожую пользу.
существует также final
декоратор, который может быть применен для маркировки методов класса как финал и препятствующий быть переопределенным. Снова это только проверяется во "время компиляции", таким образом, необходимо было бы включать статическое средство проверки типа в рабочий процесс.
Python 3.8 (через PEP 591) добавляет Final
переменные, функции, методы и классы. Вот некоторые способы использовать его:
@final
Декоратор (классы, методы)
from typing import final
@final
class Base:
# Cannot inherit from Base
class Base:
@final
def foo(self):
# Cannot override foo in subclass
Final
аннотация
from typing import final
PI: Final[float] = 3.14159 # Cannot set PI to another value
KM_IN_MILES: Final = 0.621371 # Type annotation is optional
class Foo:
def __init__(self):
self.bar: Final = "baz" # Final instance attributes only allowed in __init__
There is no ``final'' equivalent in Python.
But, to create read-only fields of class instances, you can use the property function.
Edit: perhaps you want something like this:
class WriteOnceReadWhenever:
def __setattr__(self, attr, value):
if hasattr(self, attr):
raise Exception("Attempting to alter read-only value")
self.__dict__[attr] = value
Такого не существует. В целом отношение Python звучит так: «Если вы не хотите, чтобы это изменилось, просто не изменяйте его». В любом случае, клиенты API вряд ли будут просто осматривать ваши недокументированные внутренние компоненты.
Вы могли бы, я полагаю, обойти это, используя кортежи или именованные кортежи для соответствующих битов вашей модели, которые по своей природе неизменны. Это по-прежнему не помогает с любой частью вашей модели, которая, конечно, должна быть изменчивой.
которые по своей природе неизменны. Это по-прежнему не помогает с любой частью вашей модели, которая, конечно, должна быть изменчивой. которые по своей природе неизменны. Это по-прежнему не помогает с любой частью вашей модели, которая, конечно, должна быть изменчивой.Переменная, назначаемая один раз, является проблемой проектирования. Вы разрабатываете свое приложение таким образом, что переменная устанавливается один раз и только один раз.
Однако, если вы хотите проверять свой проект во время выполнения, вы можете сделать это с помощью обертки вокруг объекта.
class OnePingOnlyPleaseVassily( object ):
def __init__( self ):
self.value= None
def set( self, value ):
if self.value is not None:
raise Exception( "Already set.")
self.value= value
someStateMemo= OnePingOnlyPleaseVassily()
someStateMemo.set( aValue ) # works
someStateMemo.set( aValue ) # fails
Это неуклюже но он обнаружит проблемы проектирования во время выполнения.
http://code.activestate.com/recipes/576527/ defines a freeze function, although it doesn't work perfectly.
I would consider just leaving it mutable though.
Python has no equivalent of "final". It doesn't have "public" and "protected" either, except by naming convention. It's not that "bondage and discipline".
you can simulate something like that through the descriptor protocol, since it allows to define reading and setting a variable the way you wish.
class Foo(object):
@property
def myvar(self):
# return value here
@myvar.setter
def myvar(self, newvalue):
# do nothing if some condition is met
a = Foo()
print a.myvar
a.myvar = 5 # does nothing if you don't want to