簡體   English   中英

python3 找不到我可以用 python2 導入的模塊

[英]python3 cannot find a module that I could import with python2

我正在嘗試從 python2 切換到 python3。 在此過程中,我還從 anaconda 切換到 miniconda3 作為我的主要 package 管理工具。 我從 github 克隆了一些其他包。 我發現我不能再從從 github 而不是 conda 下載的包中導入任何模塊。 例如,導入 linetools.utils 以前可以工作,現在不再工作。 import linetools.linetools.utils 有效,但這還不夠,因為 package 中的各種模塊相互引用。 這個 package 不是我寫的,所以將所有出現的 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 時的預期行為。 我以 package 線工具為例。

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", "copyright", "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/python', '/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 package 目錄樹的圖像。 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 設置中看到了這個)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM