PyDev 看不到自己写的 Python 3 包

PyDev not seeing self-written Python 3 package

是的,这开始令人沮丧。我已经阅读 the manual on imports 并四处搜索,显然我遗漏了一些东西。

我有:

mypkg/

mypkg/__init__.py
from .primitives import circle

mypkg/primitives/__init__.py
from .circle import vecCircle

mypkg/primitives/circle.py

在 Project>Properties>PyDev>PYTHONPATH 我添加了 /path/to/mypkg 在我的 .bash_profile 中,我将 /path/to/mypkg 附加到 PYTHONPATH 并导出。 我知道我不需要两者,但删除一个或另一个对下面没有影响。

在 PyDev 中,我想做一个

import mypkg
c = vecCircle(args)

但目前 vecCircle 带有红色下划线 (undefined variable)

我试试

import mypkg.primitives
c = vecCircle(args)

import mypkg.primitives
c = circle.vecCircle(args)

 import mypkg.primitives.circle
 c = circle.vecCircle(args)

唯一改变的是 circle.vecCircle 红色下划线圆圈,错误相同。我怎样才能得到我想要的?

我得到

Unused import: mypkg
Unresolved import: 
 mypkg
 Found at: mypkg.__init__

Python 在 PYTHONPATH 中的目录中搜索具有要导入的模块名称的子目录。

因此您需要将 /path/to/mypkg 的父目录添加到您的 PYTHONPATH,而不是 /path/to/mypkg 本身。

导入模块不会将其所有内容放入您的命名空间(除非您使用 from module import *)。您的代码只是导入模块。我认为 __init__.py 文件中的导入可能让您感到困惑。它们将名称从包的更深处导入到它们自己的命名空间中,但对导入它们的任何命名空间都没有影响。

您可以通过两种方式解决此问题。

最简单的方法可能是使用属性语法来获取您尝试访问的 vecCircle 值:

import mypkg

mypkg.circle.vecCircle(args)

如果您真的希望能够直接在您自己的命名空间中访问 vecCircle,您可以使用 from module import name 语法更改导入:

from mypkg.circle import vecCircle

vecCircle(args)

对于这两个解决方案,我一直在为最初创建为 mypkg.primitives.circle.vecCircle 的对象使用较短的名称 mypkg.circle.vecCircle。您在 mypkg/__init__.py 中进行的导入启用了此功能。如果您愿意,可以改为使用 mypkg.primitives.vecCircle(使用不同的短名称,由 mypkg/primitives/__init__.py 中的导入启用)。