问题描述
我正在尝试从 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']
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 包的目录树的图像。
如果你成功帮助我让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 设置中看到了这个)。