python3 找不到我可以用 python2 导入的模块

问题描述

我正在尝试从 python2 切换到 python3在这个过程中,我也从 anaconda 切换到 miniconda3 作为我的主要包管理工具。我从 github 克隆了一些其他包。我发现我不能再从从 github 而不是 conda 下载的包中导入任何模块。例如, import linetools.utils 曾经有效,现在不再有效。 import linetools.linetools.utils 可以工作,但这还不够,因为包内的各个模块相互引用。这个包不是我写的,所以将所有出现的 linetools.utils 更改为 linetools.linetools.utils 是不可取的。

这里有其他信息可以帮助您解决我的问题。

我的 $PYTHONPATH 环境变量设置为 /Users/lwymarie/python/。我也尝试将相同的路径放入我的 $path 变量中。没有解决我的问题。

这是我在 PYTHONPATH 下的包。只展示一些。

flemish.local> ls $PYTHONPATH
sdsspy          Barak           desisim         linetools           desiutil        pymc3           specutils           PypeIt          pyqtgraph       statsmodels
RemoteObserving     fitsio          Ska.Numpy       ginga           redrock

这是我使用 python2 和 anaconda2 时的预期行为。我以 linetools 包为例。

flemish.local> python
Python 2.7.12 |Anaconda custom (x86_64)| (default,Jul  2 2016,17:43:17) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
Type "help","copyright","credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import linetools.utils

这是上述工作时的 sys.path。只是展示了一些元素。

>>> import sys
>>> sys.path
['','/Users/lwymarie/python','/Users/lwymarie/anaconda/lib/python27.zip','/Users/lwymarie/anaconda/lib/python2.7','/Users/lwymarie/anaconda/lib/python2.7/plat-darwin','/Users/lwymarie/anaconda/lib/python2.7/plat-mac','/Users/lwymarie/anaconda/lib/python2.7/plat-mac/lib-scriptpackages','/Users/lwymarie/anaconda/lib/python2.7/lib-tk','/Users/lwymarie/anaconda/lib/python2.7/lib-old','/Users/lwymarie/anaconda/lib/python2.7/lib-dynload','/Users/lwymarie/anaconda/lib/python2.7/site-packages','/Users/lwymarie/anaconda/lib/python2.7/site-packages/PIL','/Users/lwymarie/anaconda/lib/python2.7/site-packages/Sphinx-1.3.1-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/aeosa','/Users/lwymarie/python/specutils','/Users/lwymarie/python/ginga','/Users/lwymarie/python/statsmodels','/Users/lwymarie/python/Ska.Numpy','/Users/lwymarie/python/linetools','/Users/lwymarie/python/pymc3','/Users/lwymarie/anaconda/lib/python2.7/site-packages/numpydoc-0.6.0-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/nbsphinx-0.2.9-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/recommonmark-0.4.0-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/commonmark-0.5.4-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/joblib-0.10.2-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/ginga-2.7.0-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/qtpy-1.3.1-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/desiutil-1.9.9.dev596-py2.7.egg','/Users/lwymarie/anaconda/lib/python2.7/site-packages/desisim-0.24.0.dev1308-py2.7.egg','/Users/lwymarie/python/redrock/py','/Users/lwymarie/python/PypeIt','/Users/lwymarie/anaconda/lib/python2.7/site-packages']

退出 Python,这是上面工作时的 $path 变量。

flemish.local> echo $path
/Users/lwymarie/anaconda/bin . /usr/local/bin /usr/local/etc /opt/local/bin /opt/local/sbin /usr/sbin /sbin /usr/bin /bin /usr/lang /etc /usr/etc /usr/X11/bin /usr/local/scisoft/bin /usr/local/texlive/2020/bin/x86_64-darwin /Library/Ruby/Gems/2.0.0 ./py/ ./

这是我使用 python3 和 miniconda3 时不需要的行为。

flemish.local> python
Python 3.7.4 (default,Aug 13 2019,15:17:50) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda,Inc. on darwin
Type "help","credits" or "license" for more information.
>>> import linetools.utils
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
ModuleNotFoundError: No module named 'linetools.utils'

这是发生上述错误时的 sys.path。我还尝试了 sys.path.append("/Users/lwymarie/python/linetools/") 技巧,但仍然找不到模块。

>>> import sys
>>> sys.path
['','/Users/lwymarie/miniconda3/lib/python37.zip','/Users/lwymarie/miniconda3/lib/python3.7','/Users/lwymarie/miniconda3/lib/python3.7/lib-dynload','/Users/lwymarie/miniconda3/lib/python3.7/site-packages']

退出Python,这里是发生上述错误时的$path变量。

flemish.local> echo $path
/Users/lwymarie/miniconda3/bin /Users/lwymarie/miniconda3/bin . /usr/local/bin /usr/local/etc /opt/local/bin /opt/local/sbin /usr/sbin /sbin /usr/bin /bin /usr/lang /etc /usr/etc /usr/X11/bin /usr/local/scisoft/bin /usr/local/texlive/2020/bin/x86_64-darwin /Library/Ruby/Gems/2.0.0 ./py/ ./

这是 linetools 包的目录树的图像。

linetools_pycharm

如果你成功帮助我让python3和linetools工作起来,你的善行将得到永生和幸福的回报。

解决方法

在您的 python2 sys.path 中有 '/Users/lwymarie/python/linetools',但在您的 python3 sys.path 中没有。您是否使用 python3 重新设置了 linetools?

cd ~/python/linetools
python setup.py develop
,

我认为 Steven Lau 的建议应该可行。

但请记住,您有多个索引路径。你有 /Users/lwymarie/python 和 /Users/lwymarie/python/linetools(我在你的 py2 设置中看到了这个)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...