Multiple local imports
- 主要语言
- Julia
- 星标
- 1.5k
- 派生
- 186
- PR 合并指标
- 30 天内没有已合并 PR
描述
Hello!
I have a very, I think, specific issue and I would like to know, why PyCall does that and how to fix it.
Let's assume, that I have 2 folders `folder1` and `folder2` which are repositories written in python and each has a main script file `main1.py` and `main2.py`, and those two just have inside them multiple local imports and a function `main`.
Then I have two julia scripts `folder1.jl` and `folder2.jl`, which call those `main` functions from those two folders. The code for `folder1.jl` goes like this:
```julia
pushfirst!(PyVector(pyimport("sys")."path"), folder1)
execute_JL = pyimport("main1")
pyimport("importlib").reload(execute_JL)[:main](args)
```
And both julia scripts work fine. Now I want to combine them and call both scripts in the third script `combine.jl`.
This no longer works and here are two things that happen.
1. If the first element of `PyVector(pyimport("sys")."path")` is `folder1`, then I can import `main1`, if it's `folder2`, then no. But that I managed to fix this by just removing the folder from the path, once I ran the script.
2. If I do `pyimport("main1")`, I then cannot do `pyimport("main2")` and the opposite.
In both of these cases the first time you run the code the error doesn't even say anything - just that `PyObject(Ptr{PyCall.PyObject_struct} @0x00000000521c49f0), PyObject(Ptr{PyCall.PyObject_struct} @0x00000000650bf2e8), PyObject(Ptr{PyCall.PyObject_struct} @0x00000000650b58c8))`, for example. The second time you run it - all the local imports in the file that cannot be imported fail.
Can someone tell me why that happens?
P.S. As a workaround, I could probably create `setup.py` files in those folders and install them like python libraries, but I still wonder why right now I can't make this work.
贡献指南
这个仓库没有索引到贡献指南
调研方向
首先使用 main1.py 和 main2.py 重现从 folder1.jl、folder2.jl 和 combine.jl 导入的过程,然后检查第一次导入后 Python 的 sys.path 和模块状态。完成的标准是确定为什么两个本地导入树无法通过 PyCall 共存,并记录或验证一个可行的修复方案。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- backend
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100