theQRL / QRL

Quantum Resistant Ledger
https://theqrl.org/
MIT License
414 stars 108 forks source link

no repository found in errors #1689

Open happysmash27 opened 4 years ago

happysmash27 commented 4 years ago

Describe the bug When installing QRL, it errors out with "No such file or directory" and "no repository found" errors:

 ~ % PATH="/opt/cmake-3.10.3/bin:$PATH" pip3 install --user qrl
Collecting qrl
  Using cached qrl-2.0.0.tar.gz (550 kB)
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.6 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-d9zixh3i/qrl/setup.py'"'"'; __file__='"'"'/tmp/pip-install-d9zixh3i/qrl/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-d9zixh3i/qrl/pip-egg-info
         cwd: /tmp/pip-install-d9zixh3i/qrl/
    Complete output (10 lines):
    running egg_info
    creating /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info
    writing /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/PKG-INFO
    writing dependency_links to /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/dependency_links.txt
    writing entry points to /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/entry_points.txt
    writing requirements to /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/requires.txt
    writing top-level names to /tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/top_level.txt
    writing manifest file '/tmp/pip-install-d9zixh3i/qrl/pip-egg-info/qrl.egg-info/SOURCES.txt'
    error: [Errno 2] No such file or directory: '': ''
    abort: no repository found in '/tmp/pip-install-d9zixh3i/qrl' (.hg not found)!
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

To Reproduce Steps to reproduce the behavior:

  1. Install pyqryptonight using the method described in this bug report
  2. With this setup, run PATH="/opt/cmake-3.10.3/bin:$PATH" pip3 install --user qrl.

Expected behavior QRL is updated and runs with no errors.

Desktop (please complete the following information):

happysmash27 commented 4 years ago

I have finally gotten back to this, and the same error still occurs with newer versions as well:

 ~ % pip3 install --user qrl
Collecting qrl
  Using cached qrl-2.0.5.tar.gz (550 kB)
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.6 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-zoaadj5_/qrl/setup.py'"'"'; __file__='"'"'/tmp/pip-install-zoaadj5_/qrl/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o6ux7w53
         cwd: /tmp/pip-install-zoaadj5_/qrl/
    Complete output (10 lines):
    running egg_info
    creating /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info
    writing /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/PKG-INFO
    writing dependency_links to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/dependency_links.txt
    writing entry points to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/entry_points.txt
    writing requirements to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/requires.txt
    writing top-level names to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/top_level.txt
    writing manifest file '/tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/SOURCES.txt'
    error: [Errno 2] No such file or directory: '': ''
    abort: no repository found in '/tmp/pip-install-zoaadj5_/qrl' (.hg not found)!
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
happysmash27 commented 4 years ago

I am going to try cloning the git repository directly and seeing if the output is more useful there.

happysmash27 commented 4 years ago

Much more useful... maybe:

QRL % python setup.py build
running build
running build_py
creating build
creating build/lib
creating build/lib/qrl
copying src/qrl/__init__.py -> build/lib/qrl
copying src/qrl/_version.py -> build/lib/qrl
copying src/qrl/cli.py -> build/lib/qrl
copying src/qrl/grpcProxy.py -> build/lib/qrl
copying src/qrl/main.py -> build/lib/qrl
copying src/qrl/measure.py -> build/lib/qrl
creating build/lib/qrl/core
copying src/qrl/core/AddressState.py -> build/lib/qrl/core
copying src/qrl/core/Block.py -> build/lib/qrl/core
copying src/qrl/core/BlockHeader.py -> build/lib/qrl/core
copying src/qrl/core/BlockMetadata.py -> build/lib/qrl/core
copying src/qrl/core/ChainManager.py -> build/lib/qrl/core
copying src/qrl/core/DifficultyTracker.py -> build/lib/qrl/core
copying src/qrl/core/ESyncState.py -> build/lib/qrl/core
copying src/qrl/core/GenesisBlock.py -> build/lib/qrl/core
copying src/qrl/core/Indexer.py -> build/lib/qrl/core
copying src/qrl/core/LastTransactions.py -> build/lib/qrl/core
copying src/qrl/core/Message.py -> build/lib/qrl/core
copying src/qrl/core/MessageRequest.py -> build/lib/qrl/core
copying src/qrl/core/Miner.py -> build/lib/qrl/core
copying src/qrl/core/MultiSigAddressState.py -> build/lib/qrl/core
copying src/qrl/core/OptimizedAddressState.py -> build/lib/qrl/core
copying src/qrl/core/OutgoingMessage.py -> build/lib/qrl/core
copying src/qrl/core/PaginatedBitfield.py -> build/lib/qrl/core
copying src/qrl/core/PaginatedData.py -> build/lib/qrl/core
copying src/qrl/core/PoWValidator.py -> build/lib/qrl/core
copying src/qrl/core/ProposalRecord.py -> build/lib/qrl/core
copying src/qrl/core/Singleton.py -> build/lib/qrl/core
copying src/qrl/core/State.py -> build/lib/qrl/core
copying src/qrl/core/StateContainer.py -> build/lib/qrl/core
copying src/qrl/core/StateMigration.py -> build/lib/qrl/core
copying src/qrl/core/TokenList.py -> build/lib/qrl/core
copying src/qrl/core/TokenMetadata.py -> build/lib/qrl/core
copying src/qrl/core/TransactionInfo.py -> build/lib/qrl/core
copying src/qrl/core/TransactionMetadata.py -> build/lib/qrl/core
copying src/qrl/core/TransactionPool.py -> build/lib/qrl/core
copying src/qrl/core/VoteStats.py -> build/lib/qrl/core
copying src/qrl/core/Wallet.py -> build/lib/qrl/core
copying src/qrl/core/__init__.py -> build/lib/qrl/core
copying src/qrl/core/config.py -> build/lib/qrl/core
copying src/qrl/core/formulas.py -> build/lib/qrl/core
copying src/qrl/core/messagereceipt.py -> build/lib/qrl/core
copying src/qrl/core/node.py -> build/lib/qrl/core
copying src/qrl/core/qrlnode.py -> build/lib/qrl/core
creating build/lib/qrl/crypto
copying src/qrl/crypto/AESHelper.py -> build/lib/qrl/crypto
copying src/qrl/crypto/QRandomX.py -> build/lib/qrl/crypto
copying src/qrl/crypto/Qryptonight.py -> build/lib/qrl/crypto
copying src/qrl/crypto/Qryptonight7.py -> build/lib/qrl/crypto
copying src/qrl/crypto/__init__.py -> build/lib/qrl/crypto
copying src/qrl/crypto/doctest_data.py -> build/lib/qrl/crypto
copying src/qrl/crypto/misc.py -> build/lib/qrl/crypto
copying src/qrl/crypto/xmss.py -> build/lib/qrl/crypto
creating build/lib/qrl/generated
copying src/qrl/generated/__init__.py -> build/lib/qrl/generated
copying src/qrl/generated/qrl_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrl_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlbase_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlbase_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrldebug_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrldebug_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrllegacy_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrllegacy_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlmining_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlmining_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlstateinfo_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlstateinfo_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlwallet_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlwallet_pb2_grpc.py -> build/lib/qrl/generated
creating build/lib/qrl/services
copying src/qrl/services/AdminAPIService.py -> build/lib/qrl/services
copying src/qrl/services/BaseService.py -> build/lib/qrl/services
copying src/qrl/services/DebugAPIService.py -> build/lib/qrl/services
copying src/qrl/services/MiningAPIService.py -> build/lib/qrl/services
copying src/qrl/services/PublicAPIService.py -> build/lib/qrl/services
copying src/qrl/services/WalletAPIService.py -> build/lib/qrl/services
copying src/qrl/services/__init__.py -> build/lib/qrl/services
copying src/qrl/services/grpcHelper.py -> build/lib/qrl/services
copying src/qrl/services/services.py -> build/lib/qrl/services
creating build/lib/qrl/tools
copying src/qrl/tools/__init__.py -> build/lib/qrl/tools
copying src/qrl/tools/generate_genesis.py -> build/lib/qrl/tools
copying src/qrl/tools/token_migration_json_converter.py -> build/lib/qrl/tools
creating build/lib/qrl/core/miners
copying src/qrl/core/miners/__init__.py -> build/lib/qrl/core/miners
creating build/lib/qrl/core/misc
copying src/qrl/core/misc/DependencyChecker.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/__init__.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/db.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/expiring_set.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/helper.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/logger.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/logger_twisted.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/ntp.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/set_logger.py -> build/lib/qrl/core/misc
creating build/lib/qrl/core/notification
copying src/qrl/core/notification/Observable.py -> build/lib/qrl/core/notification
copying src/qrl/core/notification/ObservableEvent.py -> build/lib/qrl/core/notification
copying src/qrl/core/notification/__init__.py -> build/lib/qrl/core/notification
creating build/lib/qrl/core/p2p
copying src/qrl/core/p2p/IPMetadata.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/__init__.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pChainManager.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pObservable.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pObserver.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pPeerManager.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pTxManagement.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pfactory.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pprotocol.py -> build/lib/qrl/core/p2p
creating build/lib/qrl/core/processors
copying src/qrl/core/processors/TxnProcessor.py -> build/lib/qrl/core/processors
copying src/qrl/core/processors/__init__.py -> build/lib/qrl/core/processors
creating build/lib/qrl/core/txs
copying src/qrl/core/txs/CoinBase.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/LatticeTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/MessageTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/SlaveTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TokenTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/Transaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TransferTokenTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TransferTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/__init__.py -> build/lib/qrl/core/txs
creating build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/QRXMiner.py -> build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/QRXPoWValidator.py -> build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/__init__.py -> build/lib/qrl/core/miners/qrandomx
creating build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/CNv1Miner.py -> build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/CNv1PoWValidator.py -> build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/__init__.py -> build/lib/qrl/core/miners/qryptonight7
creating build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigCreate.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigSpend.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigVote.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/__init__.py -> build/lib/qrl/core/txs/multisig
creating build/lib/qrl/tools/modeling
copying src/qrl/tools/modeling/__init__.py -> build/lib/qrl/tools/modeling
copying src/qrl/tools/modeling/extract_timing.py -> build/lib/qrl/tools/modeling
running egg_info
creating src/qrl.egg-info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt
writing manifest file 'src/qrl.egg-info/SOURCES.txt'
abort: no repository found in '~/Gits/QRL' (.hg not found)!
error: [Errno 2] No such file or directory: '': ''

(Home directory replaced with "~" by me)

So... why is it looking for ".hg", and what is supposed to create it?

cyyber commented 4 years ago

Try to run following command inside the QRL repo before building it

hg init

happysmash27 commented 4 years ago

Thank you! Now the error is...

QRL % python setup.py build
running build
running build_py
running egg_info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt

error: [Errno 2] No such file or directory: '': ''

Pretty much the exact same thing, but a bit less verbose. Hmm.

happysmash27 commented 4 years ago

Much more useful when made verbose:

QRL % python setup.py -v build
running build
running build_py
not copying src/qrl/__init__.py (output up-to-date)
not copying src/qrl/_version.py (output up-to-date)
not copying src/qrl/cli.py (output up-to-date)
not copying src/qrl/grpcProxy.py (output up-to-date)
not copying src/qrl/main.py (output up-to-date)
not copying src/qrl/measure.py (output up-to-date)
not copying src/qrl/core/AddressState.py (output up-to-date)
not copying src/qrl/core/Block.py (output up-to-date)
not copying src/qrl/core/BlockHeader.py (output up-to-date)
not copying src/qrl/core/BlockMetadata.py (output up-to-date)
not copying src/qrl/core/ChainManager.py (output up-to-date)
not copying src/qrl/core/DifficultyTracker.py (output up-to-date)
not copying src/qrl/core/ESyncState.py (output up-to-date)
not copying src/qrl/core/GenesisBlock.py (output up-to-date)
not copying src/qrl/core/Indexer.py (output up-to-date)
not copying src/qrl/core/LastTransactions.py (output up-to-date)
not copying src/qrl/core/Message.py (output up-to-date)
not copying src/qrl/core/MessageRequest.py (output up-to-date)
not copying src/qrl/core/Miner.py (output up-to-date)
not copying src/qrl/core/MultiSigAddressState.py (output up-to-date)
not copying src/qrl/core/OptimizedAddressState.py (output up-to-date)
not copying src/qrl/core/OutgoingMessage.py (output up-to-date)
not copying src/qrl/core/PaginatedBitfield.py (output up-to-date)
not copying src/qrl/core/PaginatedData.py (output up-to-date)
not copying src/qrl/core/PoWValidator.py (output up-to-date)
not copying src/qrl/core/ProposalRecord.py (output up-to-date)
not copying src/qrl/core/Singleton.py (output up-to-date)
not copying src/qrl/core/State.py (output up-to-date)
not copying src/qrl/core/StateContainer.py (output up-to-date)
not copying src/qrl/core/StateMigration.py (output up-to-date)
not copying src/qrl/core/TokenList.py (output up-to-date)
not copying src/qrl/core/TokenMetadata.py (output up-to-date)
not copying src/qrl/core/TransactionInfo.py (output up-to-date)
not copying src/qrl/core/TransactionMetadata.py (output up-to-date)
not copying src/qrl/core/TransactionPool.py (output up-to-date)
not copying src/qrl/core/VoteStats.py (output up-to-date)
not copying src/qrl/core/Wallet.py (output up-to-date)
not copying src/qrl/core/__init__.py (output up-to-date)
not copying src/qrl/core/config.py (output up-to-date)
not copying src/qrl/core/formulas.py (output up-to-date)
not copying src/qrl/core/messagereceipt.py (output up-to-date)
not copying src/qrl/core/node.py (output up-to-date)
not copying src/qrl/core/qrlnode.py (output up-to-date)
not copying src/qrl/crypto/AESHelper.py (output up-to-date)
not copying src/qrl/crypto/QRandomX.py (output up-to-date)
not copying src/qrl/crypto/Qryptonight.py (output up-to-date)
not copying src/qrl/crypto/Qryptonight7.py (output up-to-date)
not copying src/qrl/crypto/__init__.py (output up-to-date)
not copying src/qrl/crypto/doctest_data.py (output up-to-date)
not copying src/qrl/crypto/misc.py (output up-to-date)
not copying src/qrl/crypto/xmss.py (output up-to-date)
not copying src/qrl/generated/__init__.py (output up-to-date)
not copying src/qrl/generated/qrl_pb2.py (output up-to-date)
not copying src/qrl/generated/qrl_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlbase_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlbase_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrldebug_pb2.py (output up-to-date)
not copying src/qrl/generated/qrldebug_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrllegacy_pb2.py (output up-to-date)
not copying src/qrl/generated/qrllegacy_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlmining_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlmining_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlstateinfo_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlstateinfo_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlwallet_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlwallet_pb2_grpc.py (output up-to-date)
not copying src/qrl/services/AdminAPIService.py (output up-to-date)
not copying src/qrl/services/BaseService.py (output up-to-date)
not copying src/qrl/services/DebugAPIService.py (output up-to-date)
not copying src/qrl/services/MiningAPIService.py (output up-to-date)
not copying src/qrl/services/PublicAPIService.py (output up-to-date)
not copying src/qrl/services/WalletAPIService.py (output up-to-date)
not copying src/qrl/services/__init__.py (output up-to-date)
not copying src/qrl/services/grpcHelper.py (output up-to-date)
not copying src/qrl/services/services.py (output up-to-date)
not copying src/qrl/tools/__init__.py (output up-to-date)
not copying src/qrl/tools/generate_genesis.py (output up-to-date)
not copying src/qrl/tools/token_migration_json_converter.py (output up-to-date)
not copying src/qrl/core/miners/__init__.py (output up-to-date)
not copying src/qrl/core/misc/DependencyChecker.py (output up-to-date)
not copying src/qrl/core/misc/__init__.py (output up-to-date)
not copying src/qrl/core/misc/db.py (output up-to-date)
not copying src/qrl/core/misc/expiring_set.py (output up-to-date)
not copying src/qrl/core/misc/helper.py (output up-to-date)
not copying src/qrl/core/misc/logger.py (output up-to-date)
not copying src/qrl/core/misc/logger_twisted.py (output up-to-date)
not copying src/qrl/core/misc/ntp.py (output up-to-date)
not copying src/qrl/core/misc/set_logger.py (output up-to-date)
not copying src/qrl/core/notification/Observable.py (output up-to-date)
not copying src/qrl/core/notification/ObservableEvent.py (output up-to-date)
not copying src/qrl/core/notification/__init__.py (output up-to-date)
not copying src/qrl/core/p2p/IPMetadata.py (output up-to-date)
not copying src/qrl/core/p2p/__init__.py (output up-to-date)
not copying src/qrl/core/p2p/p2pChainManager.py (output up-to-date)
not copying src/qrl/core/p2p/p2pObservable.py (output up-to-date)
not copying src/qrl/core/p2p/p2pObserver.py (output up-to-date)
not copying src/qrl/core/p2p/p2pPeerManager.py (output up-to-date)
not copying src/qrl/core/p2p/p2pTxManagement.py (output up-to-date)
not copying src/qrl/core/p2p/p2pfactory.py (output up-to-date)
not copying src/qrl/core/p2p/p2pprotocol.py (output up-to-date)
not copying src/qrl/core/processors/TxnProcessor.py (output up-to-date)
not copying src/qrl/core/processors/__init__.py (output up-to-date)
not copying src/qrl/core/txs/CoinBase.py (output up-to-date)
not copying src/qrl/core/txs/LatticeTransaction.py (output up-to-date)
not copying src/qrl/core/txs/MessageTransaction.py (output up-to-date)
not copying src/qrl/core/txs/SlaveTransaction.py (output up-to-date)
not copying src/qrl/core/txs/TokenTransaction.py (output up-to-date)
not copying src/qrl/core/txs/Transaction.py (output up-to-date)
not copying src/qrl/core/txs/TransferTokenTransaction.py (output up-to-date)
not copying src/qrl/core/txs/TransferTransaction.py (output up-to-date)
not copying src/qrl/core/txs/__init__.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/QRXMiner.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/QRXPoWValidator.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/__init__.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/CNv1Miner.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/CNv1PoWValidator.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/__init__.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigCreate.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigSpend.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigVote.py (output up-to-date)
not copying src/qrl/core/txs/multisig/__init__.py (output up-to-date)
not copying src/qrl/tools/modeling/__init__.py (output up-to-date)
not copying src/qrl/tools/modeling/extract_timing.py (output up-to-date)
running egg_info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt
'license_file' option was not specified

error: [Errno 2] No such file or directory: '': ''

...So maybe it has to do with "license_file"? But now the question is which line of code prints that, and which line of code is asking for the file or directory '': ''?

happysmash27 commented 4 years ago

setup.py seems to call setuptools to use pyscaffold in some way, but I know pretty much nothing about these tools making it really hard for me to debug. Usually I would just follow the layers of functions until it got to something useful, but everything is so abstracted that I do not know where anything is.

happysmash27 commented 3 years ago

Modifying setup_package to be:

def setup_package():
    needs_sphinx = {'build_sphinx', 'upload_docs'}.intersection(sys.argv)
    sphinx = ['sphinx'] if needs_sphinx else []
    print("Running setup")
    try:
        print("Trying setup")
        pdb.set_trace()
        setup(setup_requires=['pyscaffold>=3.0a0,<3.1a0'] + sphinx,
              entry_points=entry_points,
              version=versioneer.get_version(),
              cmdclass=versioneer.get_cmdclass(),
              use_pyscaffold=True)
        print("End of setup")
    except Exception:
        print("Exception occured")
        pdb.post_mortem()

To use pdb.

Then stepping through the entire setuptools program using:

until 38
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 1552
s
until 52
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
until 306
s
until 541
s
until 581
s
until 18

(Line numbers will probably change if you have a different version of setuptools than me)

I have finally isolated the file not found error to the function walk_revctrl(dirname='') in /usr/lib/python3.9/site-packages/setuptools/command/sdist.py at this line:

(Pdb) ll
 15     def walk_revctrl(dirname=''):
 16         """Find all files under revision control"""
 17         for ep in pkg_resources.iter_entry_points('setuptools.file_finders'):
 18  ->         for item in ep.load()(dirname):
 19                 yield item

So the problem is whatever is calling that function.

That appears to be the following line in /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py:

(Pdb) ll
577         def add_defaults(self):
578             sdist.add_defaults(self)
579             self.filelist.append(self.template)
580             self.filelist.append(self.manifest)
581  ->         rcfiles = list(walk_revctrl())
582             if rcfiles:
583                 self.filelist.extend(rcfiles)
584             elif os.path.exists(self.manifest):
585                 self.read_manifest()
586     
587             if os.path.exists("setup.py"):
588                 # setup.py should be included by default, even if it's not
589                 # the script called to create the sdist
590                 self.filelist.append("setup.py")
591     
592             ei_cmd = self.get_finalized_command('egg_info')
593             self.filelist.graft(ei_cmd.egg_info)
happysmash27 commented 3 years ago

Uh huh...

(Pdb) ll
 15  -> def walk_revctrl(dirname=''):
 16         """Find all files under revision control"""
 17         for ep in pkg_resources.iter_entry_points('setuptools.file_finders'):
 18             for item in ep.load()(dirname):
 19                 yield item
(Pdb) until 18
> /usr/lib/python3.9/site-packages/setuptools/command/sdist.py(18)walk_revctrl()
-> for item in ep.load()(dirname):
(Pdb) display ep
display ep: EntryPoint.parse('setuptools_scm = pyscaffold.contrib.setuptools_scm.integration:find_files')
(Pdb) s
--Call--
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2437)load()
-> def load(self, require=True, *args, **kwargs):
(Pdb) ll
2437 ->     def load(self, require=True, *args, **kwargs):
2438            """
2439            Require packages for this EntryPoint, then resolve it.
2440            """
2441            if not require or args or kwargs:
2442                warnings.warn(
2443                    "Parameters to load are deprecated.  Call .resolve and "
2444                    ".require separately.",
2445                    PkgResourcesDeprecationWarning,
2446                    stacklevel=2,
2447                )
2448            if require:
2449                self.require(*args, **kwargs)
2450            return self.resolve()
(Pdb) display ep.load
display ep.load: ** raised NameError: name 'ep' is not defined **
(Pdb) until 2450
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2450)load()
-> return self.resolve()
(Pdb) s
--Call--
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2452)resolve()
-> def resolve(self):
(Pdb) ll
2452 ->     def resolve(self):
2453            """
2454            Resolve the entry point from its module and attrs.
2455            """
2456            module = __import__(self.module_name, fromlist=['__name__'], level=0)
2457            try:
2458                return functools.reduce(getattr, self.attrs, module)
2459            except AttributeError as exc:
2460                raise ImportError(str(exc)) from exc
(Pdb) display self.module_name
display self.module_name: 'pyscaffold.contrib.setuptools_scm.integration'

I had made a thread to test if this is a Pyscaffold error and it looks like it may be one indeed? Still not sure yet.

Edit: Actually, it does get beyond self.resolve(). Hmm... I guess I must still step more granularly.

happysmash27 commented 3 years ago

In https://github.com/pyscaffold/pyscaffold/discussions/484, I was recommended to try running the command without the .hg.

In doing this, the process to get to get an error is a bit different. .hg seems to be missing in the find_sources command in egg_info.py(295)run(), run by the egg_info in the build_py class of usr/lib/python3.9/site-packages/setuptools/command/build_py.py. I get there using the following sequence of operations, this time operating on an unmodified setup.py with command python -m pdb setup.py build, as this is a newly-cloned repository:

until 37
s
until 33
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
happysmash27 commented 3 years ago

Upon debugging more, this seems to be an error in yet another invocation of walk_revctrl, in /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(581)add_defaults():

> /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(577)add_defaults()
-> def add_defaults(self):
(Pdb) ll
577  ->     def add_defaults(self):
578             sdist.add_defaults(self)
579             self.filelist.append(self.template)
580             self.filelist.append(self.manifest)
581             rcfiles = list(walk_revctrl())
582             if rcfiles:
583                 self.filelist.extend(rcfiles)
584             elif os.path.exists(self.manifest):
585                 self.read_manifest()
586     
587             if os.path.exists("setup.py"):
588                 # setup.py should be included by default, even if it's not
589                 # the script called to create the sdist
590                 self.filelist.append("setup.py")
591     
592             ei_cmd = self.get_finalized_command('egg_info')
593             self.filelist.graft(ei_cmd.egg_info)
(Pdb) until 581
> /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(581)add_defaults()
-> rcfiles = list(walk_revctrl())
(Pdb) n
abort: no repository found in '/home/happysmash27/Gits/New/QRL' (.hg not found)
FileNotFoundError: [Errno 2] No such file or directory: ''

Upon going into the function, after the following series of steps:

until 37
s
until 33
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
until 306
s
until 541
s
until 581
s

ep.load()(dirname) is successful at returning items until... around versioneer.py? Anyway, rather than manually go through all of these each time, I decided to look at the documentation to see if there is a way to break once a variable is a certain value, and there indeed is. So, my commands to get to the point of this are now:

tbreak /usr/lib/python3.9/site-packages/setuptools/command/sdist.py:18, item=="versioneer.py"
continue
continue
happysmash27 commented 2 years ago

I've done some more debugging, with a fresh repository, and this time making comments to know what it's doing:

break 33
continue
n
//setup command
s
until 153
//runs the build command
//bunch of wrapper functions here
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
//We run command build_py
p command
until 985
s
until 1552
s
//self.build_packages on line 55 might be related
//But the error happens on line 56, build_package_data
//Runs self.build_package_data
until 56
s
//Ooh! Interesting. Trying to run p self.data_files actually triggers the error!
until 118
s
//At this point, pdb puts me into a __getattr__ function with comment "lazily compute data files"
until 69
s
//Now we are in __get_data_files(self)
//It fails on self.analyze_manifest()
until 82
s
//Then it fails on self.run_command('egg_info')
until 139
//Wrapper functions again
s
until 313
s
until 985
s
//Now we are in this other run command, in egg_info.py
//It does all the "writing *****" messages in the for loop. No error here.
//And then it fails in self.find_sources(), line 299
until 299
s
//It does manifest_filename = os.path.join(self.egg_info, "SOURCES.txt")
p os.path.join(self.egg_info, "SOURCES.txt")
//The value of os.path.join(self.egg_info, "SOURCES.txt") is 'src/qrl.egg-info/SOURCES.txt'
//This file is empty.
//This must mean it is filling the file?
//It assigns that to mm.manifest. mm = manifest_maker(self.distribution)
//As expected, the failure point here is mm.run(), line 306
until 306
s
//This function is also in egg_info.py, line 137
//It fails in self.add_defaults()
until 541
s
//And then, it fails in 581: rcfiles = list(walk_revctrl()), which as we know from previous experiments, is the failure point
//The line after it says if rcfiles. This file doesn't even need to exist!
//So the problem is, that it is throwing the error instead of ignoring it?