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
中的导入启用)。
是的,这开始令人沮丧。我已经阅读 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
中的导入启用)。