簡體   English   中英

導入Python包-“ ImportError:未命名模塊...”

[英]Importing Python package - “ImportError: No module named…”

我知道關於“ ImportError:未命名的模塊...”有很多問題,但是它們通常似乎可以歸結為無__init__.py文件或$PYTHONPATH沒有的軟件包目錄。 我已經檢查了這兩個問題,但我的問題還不止於這些。

我有一個包含協議緩沖區定義的項目。 有一個生成文件,其生成源為Python,Java或Go。 有一個setup.py文件,它執行make python 我已經運行了pip install -e . 在此目錄中,該目錄將按預期生成源文件。

然后,我有一個單獨的項目,嘗試使用生成的protobuf。

讓我說明一下我的項目:

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

我在這里錯過了什么? 看來這應該可行,但是我顯然還不了解一些關鍵的內容。

假設您具有以下結構:

demo_proj
    |
    myproject/
    ├── module
    │   ├── __init__.py
    │   └── module.py
    └── main.py

    myprotos/
    ├── Makefile
    ├── __init__.py
    ├── my.proto
    ├── my_pb2.py
    ├── myprotos.egg-info
    │   ├── PKG-INFO
    │   ├── SOURCES.txt
    │   ├── dependency_links.txt
    │   └── top_level.txt
    └── setup.py

main.py中的代碼:

import sys
sys.path.insert(0, '/path/to/demo_proj')

import myprotos

暫無
暫無

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

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