Ошибка импортера: не удается импортировать имя «SimpleCollectible» из «брауни»

#python #brownie

Вопрос:

Реализация колбы с домовым, для автоматизации кода create_collectible при нажатии кнопки. Простой коллекционный предмет импорта взят из этого учебника:

https://youtu.be/ZH_7nEIJDUY

Ссылки:

   File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 256, in locate_app
    __import__(module_name)
  File "/Users/work/Documents/OpenvinoNFT/app/api/api.py", line 2, in <module>
    from create_collectible import main, nftcode
  File "/Users/work/Documents/OpenvinoNFT/app/api/create_collectible.py", line 4, in <module>
    from brownie import SimpleCollectible, account, network, config
ImportError: cannot import name 'SimpleCollectible' from 'brownie' (/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/brownie/__init__.py)

Traceback (most recent call last)
File "/Users/work/Documents/OpenvinoNFT/app/api/api.py", line 2, in <module>
from create_collectible import main, nftcode
File "/Users/work/Documents/OpenvinoNFT/app/api/create_collectible.py", line 4, in <module>
from brownie import SimpleCollectible, account, network, config
During handling of the above exception, another exception occurred:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 359, in __call__
rv = self._load_unlocked()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 346, in _load_unlocked
self._app = rv = self.loader()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 402, in load_app
app = locate_app(self, import_name, name)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 261, in locate_app
raise NoAppException(
flask.cli.NoAppException: While importing 'api', an ImportError was raised:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flask/cli.py", line 256, in locate_app
__import__(module_name)
File "/Users/work/Documents/OpenvinoNFT/app/api/api.py", line 2, in <module>
from create_collectible import main, nftcode
File "/Users/work/Documents/OpenvinoNFT/app/api/create_collectible.py", line 4, in <module>
from brownie import SimpleCollectible, account, network, config
ImportError: cannot import name 'SimpleCollectible' from 'brownie' (/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/brownie/__init__.py)
 

Комментарии:

1. Код в этом посте гораздо полезнее, чем видео. Пожалуйста, перепишите все содержательное содержание этих видео в разборчивую прозу и фрагменты кода здесь, на этой странице.

Ответ №1:

Мне удалось решить эту проблему, выполнив следующее:

В моем приложении для колб я добавил:

 os.system("brownie run scripts/simple_collectible/create_collectible.py  --network rinkeby")
 

под моим @app.маршрут на колбе.

Проблема заключалась в том, что код выполнялся в интерфейсе командной строки python, а не в интерфейсе командной строки Brownie, как предполагалось.

Возможно, это не лучший способ сделать это, но он работает. Спасибо

Ответ №2:

Проверьте документацию, вы найдете, какие импорт доступны.

SimpleCollectible действительно, в базовом модуле нет

https://eth-brownie.readthedocs.io/en/stable/api-brownie.html#brownie

Комментарии:

1. Простое коллекционирование-это контракт в солидности, созданный мной самим. Если я запущу код без колбы, он запустится!! Дело не в этом!

2. Ну, если вы используете python или команду flask, а не brownie параметры интерфейса командной строки, он, вероятно, не знает, как загружать ваши контракты. Я не знаком с этими модулями, но предлагаю опубликовать их в ethereum stackexchange, чтобы посмотреть, сможет ли он запускать веб-сервер с вашими материалами

3. @Fpiantoni, если SimpleCollectible это что-то, что вы создали сами, почему вы пытаетесь импортировать это из brownie модуля? Он, по-видимому, был бы расположен где-то в вашем собственном коде.

4. @jasonharper Смотрите видео в вопросе… Я предполагаю brownie , что команда running компилирует контракт солидности в код Python, а затем манипулирует pythonpath, чтобы добавить его в путь импорта модуля. Выполнение чего-либо еще, подобного python flask командам или, не сделало бы этого

Ответ №3:

Удалите файл SimpleCollectible.sol (я имею в виду не код, я имею в виду файл).

Затем создайте его заново с соответствующим кодом в нем.

Ответ №4:

Объяснение ошибки, которую вы получаете, заключается в том, что если вы запускаете скрипт, используя vs-код напрямую, контракты не видны брауни, вместо этого вы должны запустить его из терминала, используя команду «брауни запускает create_collectible».

Ответ №5:

Измените написание на «SimpleCollectable» и установите «brownie pm install OpenZeppelin/openzeppelin-contracts@3.0.0».