Windows Schreibschutz entfernen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
spyder3luke
User
Beiträge: 11
Registriert: Montag 8. April 2019, 15:12

Python (Spyder) kann auf einen HYPER-HIPER-MEGAWICHTIGEN Ordner (C/User/Acer/Downloads/z3) nicht zugreifen weil dieser von Windows schreibgeschützt ist. Ich habe schon mehrmals den Schreibschutz entfernt, allen Benutzern und Gruppen Vollberechtigung gegeben, ohne Erfolg. Gibt es eine Möglichkeit für pythonw.exe eine Spezialberechtigung zu geben für diesen Ordner zu geben?
Benutzeravatar
sparrow
User
Beiträge: 4533
Registriert: Freitag 17. April 2009, 10:28

Anwendungen/Windows können Dateien auch sperren, wenn darauf bereits zugegriffen wird.
Wie lautet denn die genaue Fehlermeldung?
spyder3luke
User
Beiträge: 11
Registriert: Montag 8. April 2019, 15:12

sparrow hat geschrieben: Samstag 7. Dezember 2019, 11:24 Anwendungen/Windows können Dateien auch sperren, wenn darauf bereits zugegriffen wird.
Wie lautet denn die genaue Fehlermeldung?
In Python OSError: exception: access violation writing 0xFFFFFFFFCA7500B0 und wirklich kein anderes Programm greift auf diesen Solver zu. Auch geht es hier vorallem um ein dll-File. Gibt es eine Art das im Python selbst abzufangen und eine Art "sudo" (wie gesagt Windows) ans System zu schicken? Im Grunde ist das Problem, dass dieses Feld:
Bild
aus mir unbekannten Gründen nicht weiß bleibt. Gestern war es mit einmal entfernen noch getan.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Kannst du bitte den exakten Code zeigen, der diesen Fehler produziert.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

spyder3luke hat geschrieben: Samstag 7. Dezember 2019, 12:10 In Python OSError: exception: access violation writing 0xFFFFFFFFCA7500B0 und wirklich kein anderes Programm greift auf diesen Solver zu.
Der Fehler klingt mir aber nicht nach einem Dateizugriffsfehler, sondern nach einem Speicherzugriffsfehler. Da arbeitet anscheinend irgendeine eingebundene Bibliothek nicht ganz sauber.
Benutzeravatar
sparrow
User
Beiträge: 4533
Registriert: Freitag 17. April 2009, 10:28

Also nur um noch einmal zu unterstreichen, was /me sagt: Das von dir angesprochene Feld ist bei allen Verzeichnissen in den Eigenschaften gesetzt und ist ohne Wirkung für das Verzeichnis. Und es steht ja auch dahinter: Betrifft die Dateien im Ordner. Wenn es geändert wird, wird die Änderung (nachgefragt) auf die vorhandenen Dateien darin angwandt.

Genaugenommen handelt es sich hier um die grundlegenden Dateiattribute aus dem FAT-Dateisystem, die seit DOS-Zeiten auch mit "attrib" gesetzt werden können. Wenn ich mich richtig erinnere, geht das für Verzeichnisse gar nicht. Neu angelegte Dateien haben das Attribut nie automatisch.

Deshalb ist es immer wichtig den Fehler und den Code der zu dem Fehler führt zu zeigen. Die Schlussfolgerung, gerade wenn man nicht Sattelfest in der Sprache oder dem Betriebssytem ist, kann dann nämlich - wie hier - schon falsch sein.

Dieses Schreibgeschützt-Attribut hat übrigens nur Gültigkeit, wenn es auch ausgewertet wird. Im Explorer löscht man eine solche Datei ohne Probleme und zusätzliche Nachfrage.
Löschen in Python über os.unlink führt zu einem Permission Error (WinError 5), Überschreiben führt zu einem PermissionError (Errno 13).
spyder3luke
User
Beiträge: 11
Registriert: Montag 8. April 2019, 15:12

sparrow hat geschrieben: Sonntag 8. Dezember 2019, 02:11 Also nur um noch einmal zu unterstreichen, was /me sagt: Das von dir angesprochene Feld ist bei allen Verzeichnissen in den Eigenschaften gesetzt und ist ohne Wirkung für das Verzeichnis. Und es steht ja auch dahinter: Betrifft die Dateien im Ordner. Wenn es geändert wird, wird die Änderung (nachgefragt) auf die vorhandenen Dateien darin angwandt.

Genaugenommen handelt es sich hier um die grundlegenden Dateiattribute aus dem FAT-Dateisystem, die seit DOS-Zeiten auch mit "attrib" gesetzt werden können. Wenn ich mich richtig erinnere, geht das für Verzeichnisse gar nicht. Neu angelegte Dateien haben das Attribut nie automatisch.

Deshalb ist es immer wichtig den Fehler und den Code der zu dem Fehler führt zu zeigen. Die Schlussfolgerung, gerade wenn man nicht Sattelfest in der Sprache oder dem Betriebssytem ist, kann dann nämlich - wie hier - schon falsch sein.

Dieses Schreibgeschützt-Attribut hat übrigens nur Gültigkeit, wenn es auch ausgewertet wird. Im Explorer löscht man eine solche Datei ohne Probleme und zusätzliche Nachfrage.
Löschen in Python über os.unlink führt zu einem Permission Error (WinError 5), Überschreiben führt zu einem PermissionError (Errno 13).
Ok der Code funktioniert wenn er Zugriff auf diesen Bibliotheksordner erlangt, es ist aber jedes mal beim Einschalten ein Katz und Mausspiel. Gestern dann plötzlich wieder.
hier der volle Fehleroutput:

Code: Alles auswählen

Traceback (most recent call last):

  File "<ipython-input-1-b7726dfb3e51>", line 1, in <module>
    runfile('.../SimpleSolver.py', wdir='...')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File ".../SimpleSolver.py", line 12, in <module>
    s=Solver()

  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3.py", line 5911, in __init__
    Z3_solver_inc_ref(self.ctx.ref(), self.solver)

  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3core.py", line 3962, in Z3_solver_inc_ref
    lib().Z3_solver_inc_ref(a0, a1)

OSError: exception: access violation writing 0xFFFFFFFF9FE7FC70
Das entsprechende Python-File (('.../SimpleSolver.py') sieht so aus:

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Wed Dec  4 11:41:39 2019

@author: Acer
"""

from z3 import *
from collections import defaultdict
from typing import Iterable

s=Solver()
...
(Überigens die Fehlermeldung zeigt schon den vollen Pfad an, ich habe es nur mit den ... ersetzt weil das ja keinen Unterschied macht. Oder?)
Das Problem wird einfach durch den Aufruf des eigentlich durch die Bibliothek bereit gestellten Solver verursacht. Was muss ich in der Winodws-Regiestry verstellen um das Problem ein für alle mal zu lösen?
Benutzeravatar
__blackjack__
User
Beiträge: 14013
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@spyder3luke: Gar nichts, das sieht einfach nach einem Fehler in diesem externen Modul aus und zwar wie schon angemerkt wurde überhaupt nichts mit Verzeichnissen oder Dateirechten. Da wird versucht an eine Speicheradresse zu schreiben, die nicht dafür vorgesehen ist beschrieben zu werden. Passiert zum Beispiel wenn Speicher mit Zeigern vorher durch irgendetwas überschrieben wurde, oder wenn Zeiger gar nicht erst initialisiert wurden.

Wenn man sich die `z3`-Pfade so anschaut, sieht das so aus als wenn das nicht ordentlich installiert wurde‽
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Das hat nichts mit irgendwelchen Berechtigungen auf Dateien zu tun. Das ist ein interner Fehler dieser Z3-Bibliothek. Da kannst Du erstmal nichts machen. Wie und welche Version hast Du installiert? Komisch ist ja, dass Du etwas aus dem Download-Ordner benutzt.
spyder3luke
User
Beiträge: 11
Registriert: Montag 8. April 2019, 15:12

__blackjack__ hat geschrieben: Sonntag 8. Dezember 2019, 11:02 @spyder3luke: Gar nichts, das sieht einfach nach einem Fehler in diesem externen Modul aus und zwar wie schon angemerkt wurde überhaupt nichts mit Verzeichnissen oder Dateirechten. Da wird versucht an eine Speicheradresse zu schreiben, die nicht dafür vorgesehen ist beschrieben zu werden. Passiert zum Beispiel wenn Speicher mit Zeigern vorher durch irgendetwas überschrieben wurde, oder wenn Zeiger gar nicht erst initialisiert wurden.

Wenn man sich die `z3`-Pfade so anschaut, sieht das so aus als wenn das nicht ordentlich installiert wurde‽
Ich habe noch einmal neu installiert (mit pip) und den manuell angelegten Python Pfad (C:\Acer\Downloads\z3\bin) aus den Systemvariablen entfernt (oder so denke ich es zumindest denn aus irgendeinen Grund ist dieser Ordner immer noch in der neuen Fehlermeldung, und das war vielleicht ein großer Fehler) es funktioniert immer noch nicht.

Code: Alles auswählen

>>> s=Solver()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3.py", line 5905, in __init__
    self.ctx    = _get_ctx(ctx)
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3.py", line 219, in _get_ctx
    return main_ctx()
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3.py", line 214, in main_ctx
    _main_ctx = Context()
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3.py", line 159, in __init__
    conf = Z3_mk_config()
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3core.py", line 1228, in Z3_mk_config
    r = lib().Z3_mk_config()
  File "C:\Users\Acer\Downloads\z3\bin\python\z3\z3core.py", line 22, in lib
    raise Z3Exception("init(Z3_LIBRARY_PATH) must be invoked before using Z3-python")
z3.z3types.Z3Exception: init(Z3_LIBRARY_PATH) must be invoked before using Z3-python
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na und hast du mal gemacht was die Fehlermeldung besagt, und dieses init aufgerufen?
spyder3luke
User
Beiträge: 11
Registriert: Montag 8. April 2019, 15:12

__deets__ hat geschrieben: Sonntag 8. Dezember 2019, 12:36 Na und hast du mal gemacht was die Fehlermeldung besagt, und dieses init aufgerufen?
und wie? Ich bekomme nur NameError init is not definied. Plus habe ich das davor wenn es funktioniert hat (und ich betone das hat es zu weilen) auch kein init gebraucht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich benutze dieses Z3 nicht. Ich sehe nur eine Meldung die Hinweise gibt, was fehlt. Wegen mir lass es sein. Ich kann mir aber schwer vorstellen dieses Vorgehen ist nicht irgendwo dokumentiert. Hast du danach gesucht? Und was genau hast du probiert als der NameError auftauchte? Ohne passenden Import oder Qualifizierung mit einem Modul-Namen gibt es natürlich kein init.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Antworten