Python imports

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Pim.
  • Registratie: Mei 2001
  • Laatst online: 16-08 16:15

Pim.

Aut viam inveniam, aut faciam

Topicstarter
Helden:

Ik loop te kloten met de import van packages/classes in Python
Ik heb de volgende structuur:
SQLprogram
- controller
          - cmdlinecontroller
- whatsapp
           - parser
- xmlwriter
           - writer

Ik heb de xml writer in de whatsapp parser geimporteerd door: __all__ = ["writer"] in de init.py van de XMLwrtiter te zetten en door de writer in de parser te importeren
(import XMLwriter.writer en xmlw = XMLwriter.writer)

Als ik hetzelfde probeer met de parser die ik in de controller wil hebben lukt het niet en krijg ik :
ImportError: No module named WhatsApp.Parser

Ik heb me ondertussen scheel geoogled en heb van alles geprobeerd onder andere dit: http://docs.python.org/tutorial/modules.html

Wat heb ik gedaan
Python:
1
2
3
4
5
6
7
8
import WhatsApp.Parser
import WhatsApp
from WhatsApp import *

in de __init__.py van de WhatsApp module:
 __all__ = ["parser"]
in de init van het programma:
 __all__ = ["whatsapp", "xmlwriter", "controller"]


Ik lees het kennelijk niet goed en ben even de weg kwijt.....
iemand ?

[ Voor 1% gewijzigd door RobIII op 22-07-2012 18:59 . Reden: Code tages toegevoegd ]

"The trouble with quotes from the Internet is that you can never know if they are genuine." - Elvis Presley | Niet met me eens ? DM ME


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Heet dat ding nou parser of Parser of WhatsApp.Parser? :p Case maakt uit, zelfs op een case-insensitive platform.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Pim.
  • Registratie: Mei 2001
  • Laatst online: 16-08 16:15

Pim.

Aut viam inveniam, aut faciam

Topicstarter
Ik heb net al mijn klassen en packages naar lowercase gezet en daar ligt het helaas niet aan.
Ik werk bovendien vanuit Eclipse en als ik in de main klasse op 'uitvoeren' druk dan krijg ik geen foutmelding vanaf de commandline (van waar het uiteindelijk moet gaan werken) nog steeds de fout *zucht*


even de OP aangepast zodat de structuur duidelijker is

[ Voor 9% gewijzigd door Pim. op 22-07-2012 15:26 ]

"The trouble with quotes from the Internet is that you can never know if they are genuine." - Elvis Presley | Niet met me eens ? DM ME


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Kan je toevallig de code ook nog even in code tags gooien? Wel zo duidelijk :P

Anyway... zoals Pedorus al zegt is Python case sensitive dus daar moet je sowieso op letten.

Als je dus deze structuur hebt:
controller/__init__.py
controller/cmdlinecontroller.py
whatsapp/__init__.py
whatsapp/parser.py
xmlwriter/__init__.py
xmlwriter/writer.py


Dan zou je import dus iets als dit kunnen zijn:
Python:
1
2
3
4
5
from whatsapp.parser import Parser

# Of:
from whatsapp import parser
parser.Parser

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Pim.
  • Registratie: Mei 2001
  • Laatst online: 16-08 16:15

Pim.

Aut viam inveniam, aut faciam

Topicstarter
Huidige situatie (niet werkend)

Afbeeldingslocatie: http://ircow.nl/pythonerror.jpg

"The trouble with quotes from the Internet is that you can never know if they are genuine." - Elvis Presley | Niet met me eens ? DM ME


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hoe voer je dit uit vanaf de commandline? Het lijkt erop dat je een bestand in een package probeert uit te voeren als eerste, maar dan zonder dat je -m gebruikt, waardoor de imports breken. (dus probeer eens python -m [dirname].[scriptname] ipv python [dirname]/[scriptname].py)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Pim.
  • Registratie: Mei 2001
  • Laatst online: 16-08 16:15

Pim.

Aut viam inveniam, aut faciam

Topicstarter
Gelukt met wat hulp :)

Probleem zat in het pythonpath, opgelost met een cmdlinewrapper:

code:
1
2
3
4
@ECHO OFF
setlocal
set PYTHONPATH=%~dp0..\
python sqlparsercontroller.py %*


Bedankt voor de hulp :)

"The trouble with quotes from the Internet is that you can never know if they are genuine." - Elvis Presley | Niet met me eens ? DM ME


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 28-07-2022

djc

Je kan dit ook zonder wrapper oplossen, door binnen je Python software, voor de rest van je imports, sys.path te manipuleren. Dus:

Python:
1
2
import sys; sys.path.insert(0, '\Een\Pad\Hier')
import waparser

[ Voor 3% gewijzigd door djc op 23-07-2012 11:27 ]

Rustacean


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 19-08 10:30
Je kunt ook pedorus' laatste post herlezen. Dat lijkt me de 'one obvious way to do it', maar als je nog meer dingen wilt regelen voordat het script start of als je gebruikers hebt die je niet wilt lastigvallen met pythons commandline interface, dan is een wrapper natuurlijk wel een optie.
Pagina: 1