簡體   English   中英

嘗試使用 boost/Python 進行相對導入超出頂級 package

[英]attempted relative import beyond top-level package with boost/Python

我已經嘗試了多種方法在此處的帖子中導入模塊,但我決定發布一個新問題,因為該帖子是關於 boost 無法找到該模塊。 這是文件夾的結構:

project
   |__ utilities
   |      |__ foo.py
   |
   |__ boost_extensions
   |      |__ myclass.cpp
   |      |__ myclass.so
   |
   |__ someotherstuff
   |      |__ bar.py      
   |
   |__ mylib.py
   |
   |__ __main__.py

在 foo.py 中,我有一些從 mylib.py 導入的代碼:

from ..mylib import MyLib
class Foo:
    # code

在 myclass.cpp 中,我找不到使用相對路徑導入 Foo 的方法,因此我使用了絕對路徑(靈感來自對此處帖子的回答):

boost::python::object mod;
void set_global(){
    boost::python::object importlib_util = import("importlib.util");

    boost::python::object spec = \
        importlib_util.attr("spec_from_file_location")("module.name",\
            "/home/username/projectfiles/project/utilities/foo.py");

    boost::python::object foo = importlib_util.attr("module_from_spec")(spec);
    mod = spec.attr("loader").attr("exec_module")(foo);
}

這給了我一個錯誤:

    from ..mylib import MyLib
ValueError: attempted relative import beyond top-level package

我怎樣才能解決這個問題?

謝謝

編輯:不確定這是否相關,但如果我打印變量__name__它總是module.name ,不管我在代碼中放了什么

# with ..utilities.foo instead of module.name in the function 
# importlib_util.attr("spec_from_file_location")("module.name",\
#            "home/username/projectfiles/project/utilities/foo.py");
print(__name__)
from ..mylib import MyLib
#output : module.name

您在 Linux 上的路徑應該是“/home/username/projectfiles/project/utilities/foo.py”。 您缺少第一個 /。

我發布了一個類似的問題,並且該解決方案在這里也有效(它是關於嘗試通過使用相對路徑在 C++ 中導入 python 模塊,我對此發表了不同的帖子,因為它給出了完全不同的錯誤)。 基本上我在 python 中加載了模塊並將其作為參數傳遞給 C++。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM