mojolang

'object' does not refer to a package or module


I tried the below in Jupiter, and it is working fine,

enter image description here

But one I tried to use at at file.mojo as:

from python import Python

# The Python way: `import requests as http`
let http = Python.import_module("requests")

# Now use numpy as if writing in Python

fn main():
    let url = 'http://google.com'
    let response = http.get(url)
    let content = response.text
    print(content)

I got the errors:

/home/hajsf/mojo/python.mojo:1:20: error: recursive reference to declaration
from python import Python
                   ^
/home/hajsf/mojo/python.mojo:1:6: note: previously used here
from python import Python
     ^
/home/hajsf/mojo/python.mojo:1:1: error: 'object' does not refer to a package or module
from python import Python
^
mojo: error: failed to parse the provided Mojo

Solution

  • The recursive reference to declaration comes from your file being called python.mojo, if you rename it and fix this you will get cannot call function that may raise in a context that cannot raise, to fix this one the import of the module has to be inside a function that can catch exceptions, like:

    from python import Python
    
    fn main() raises:
        let http = Python.import_module("requests")
    
        let url = "http://google.com"
        let response = http.get(url)
        let content = response.text
        print(content)
    

    the raises after main() is the important part, point 4 from here.