0
我知道有很多關於「ImportError:No module named ...」的問題,但它們似乎歸結爲沒有__init__.py
文件或包目錄不在$PYTHONPATH
。我已經檢查了這兩個問題,我的問題並不是他們的問題。導入Python包 - 「ImportError:No module named ...」
我有一個包含協議緩衝區定義的項目。有一個makefile生成Python,Java或Go的源代碼。有一個setup.py
文件執行make python
。我在此目錄中運行pip install -e .
,該目錄可按預期生成源文件。
然後我有一個單獨的項目,我試圖使用生成的protobufs。
讓我說明我的項目:
myproject/
├── module
│ ├── __init__.py
│ └── module.py
└── main.py
myprotos/
├── Makefile
├── __init__.py
├── my.proto
├── my_pb2.py (generated by the makefile on install)
├── myprotos.egg-info (generated by setup.py)
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ └── top_level.txt
└── setup.py
的setup.py
來源很簡單:
import subprocess
import sys
from setuptools import setup
from setuptools.command.install import install
class Install(install):
"""Customized setuptools install command - builds protos on install."""
def run(self):
protoc_command = ["make", "python"]
if subprocess.call(protoc_command) != 0:
sys.exit(-1)
install.run(self)
setup(
name='myprotos',
version='0.0.1',
description='',
install_requires=[],
cmdclass={
'install': Install,
}
)
在myprotos
的__init__.py
只包含:
import my_pb2
然後的myproject/main.py
內容是:
import sys
sys.path.insert(0, '/path/to/myprotos')
import myprotos
運行這段代碼,python main.py
輸出:
Traceback (most recent call last):
File "main.py", line 12, in <module>
import myprotos
ImportError: No module named myprotos
有什麼我錯過這裏?這似乎應該工作,但我顯然沒有理解一些關鍵的東西。
@Josh - 能否請你給完整回溯?會幫助我理解。 –