python-3.x - python3 找不到我可以用 python2 导入的模块

标签 python-3.x python-2.7 conda python-module sys.path

我正在尝试从 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", "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 包目录树的图像。 linetools_pycharm

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

最佳答案

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

cd ~/python/linetools
python setup.py develop

关于python-3.x - python3 找不到我可以用 python2 导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65976508/

相关文章:

python - 检测 python 图中的峰值

python - 在两列中格式化 tkinter 消息框中的文本

python - 为什么我不能连续两次在 sys.stdin 中执行循环? (Python)

python - Apt 包未反射(reflect)在 Pyenv 中

yaml - Conda 环境导出到 yaml 文件失败

Python:使用 conda 安装 dash_table_experiments

python - 在 Python 3 中将二进制文件转换为字节数组

python-2.7 - 我正在尝试使用 scrapy 抓取网站并将抓取的数据存储到项目类的变量中

python - Concat 未按预期工作

python - 使用 conda 安装 flask-mysql